如果你看看
Tom Schultz's Blog
,您将看到,他说,如果您实例自己的上下文对象(例如CommerceContext对象),那么SiteConfigReadOnlyFreeThreaded类的实例也会在内存中创建,并且您不能做任何事情来破坏它。如果这样做的次数足够多,最终会在应用程序日志中收到警告。以下是警告的内容:
Commerce Server运行时检测到已创建SiteConfigReadOnlyFreeThreaded对象的#个以上实例。创建许多SiteConfigReadOnlyFreeThreaded实例将对站点的性能产生负面影响。有关SiteConfigReadOnlyFreeThreaded对象的建议使用,请参阅Commerce Server文档。
您还将看到Tom建议使用上下文对象的Current属性来避免此错误,如下所示:
ContentSelector cso = CommerceContext.Current.TargetingSystem.SelectionContexts["advertising"].GetSelector();
这样做会重新使用相同的singleton实例,以避免每次实例新CommerceContext类时重新创建SiteConfigReadOnlyFreeThreaded对象。
到目前为止和我在一起?好:)
真正地
using (MarketingContext ctx = MarketingContext.Create("MyCommerceSite", "MyMarketingAuthorizationStore", AuthorizationMode.NoAuthorization))
{
PageGroup[] pageGroups = ctx.PageGroups.GetAllPageGroups();
}
正如您所看到的,我正在创建一个MarketingContext类,每次调用它时(经常调用),它也会在内存中创建一个SiteConfigReadOnlyFreeThreaded。
有没有一种方法可以在每次我想做的时候,在不实例化一个全新的MarketingContext对象的情况下获得所有页面组的配置列表?