0

如果您查看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 对象?

4

1 回答 1

0

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

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

在我的例子中,我将显示错误的阈值设置为 2,只是为了显示出现的每个实例,无论它是否是一个有效的问题。我感觉限制又回到了 100,到目前为止我还没有看到任何不利影响。

于 2009-09-21T22:38:28.267 回答