繁体   English   中英

(Commerce Server)如何在不实例化新的MarketingContext对象的情况下获取PageGroup []

[英](Commerce Server) How to get the PageGroup[] without instancing a new MarketingContext object

如果查看Tom Schultz的Blog ,您会发现他说如果您实例化自己的Context对象(例如CommerceContext对象),那么也会在内存中创建SiteConfigReadOnlyFreeThreaded类的实例,并且您不能做任何破坏它的事情。 如果这样做足够多次,最终您将在应用程序日志中收到警告。 这是警告的样子:

Commerce Server运行时检测到已创建了#个以上的SiteConfigReadOnlyFreeThreaded对象实例。 创建许多SiteConfigReadOnlyFreeThreaded实例会对站点的性能产生负面影响。 请参考Commerce Server文档以获取对SiteConfigReadOnlyFreeThreaded对象的推荐使用。

您还将看到Tom表示要使用Context对象的Current属性来避免此错误,就像这样:

ContentSelector cso = CommerceContext.Current.TargetingSystem.SelectionContexts["advertising"].GetSelector();

这样做会重复使用相同的单例实例,以避免每次您实例化新的CommerceContext类时都重新创建SiteConfigReadOnlyFreeThreaded对象。

到目前为止和我在一起? 好:)

这是我真正想做的事情:获取在Commerce Server的“市场营销”部分中设置的所有页面组的列表。 据我所知,这是唯一的方法:

using (MarketingContext ctx = MarketingContext.Create("MyCommerceSite", "MyMarketingAuthorizationStore", AuthorizationMode.NoAuthorization))
{
    PageGroup[] pageGroups = ctx.PageGroups.GetAllPageGroups();
}

如您所见,我正在创建一个MarketingContext类,该类还在每次调用时也会在内存中创建一个SiteConfigReadOnlyFreeThreaded(这很常见)。

有没有一种方法可以配置所有页面组的列表,而无需每次我都想实例化一个全新的MarketingContext对象?

我做了一些挖掘,发现以下内容:

默认情况下,Microsoft将这些警告的阈值设置为甚至在错误日志中突然出现的阈值也设置为100。事实证明,如果这些警告的计数始终低于100,则它们是绝对良性的。

就我而言,我已将显示错误的阈值设置为2,以显示出现的每个实例,而不管它是否是一个有效的关注点。 我已经将上限提高到100,并且到目前为止,我还没有看到任何不利影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM