如果您查看Tom Schultz 的博客,您会看到他说,如果您实例化您自己的 Context 对象(例如 CommerceContext 对象),也会在内存中创建一个 SiteConfigReadOnlyFreeThreaded 类的实例,而您不能做任何事情来摧毁它。如果您这样做的次数足够多,您最终会在应用程序日志中收到警告。这是警告的样子:
Commerce Server 运行时检测到已创建了超过 # 个 SiteConfigReadOnlyFreeThreaded 对象的实例。创建许多 SiteConfigReadOnlyFreeThreaded 实例将对站点的性能产生负面影响。有关 SiteConfigReadOnlyFreeThreaded 对象的推荐用法,请参阅 Commerce Server 文档。
您还会看到 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 对象?