Если вы посмотрите на Блог Тома Шульца , вы увидите, что он говорит, что если вы создаете экземпляр своих собственных объектов Context (таких как объект CommerceContext), экземпляр класса SiteConfigReadOnlyFreeThreaded, созданный в память, и вы ничего не можете сделать, чтобы уничтожить ее. Если вы делаете это достаточно много раз, вы в конечном итоге получите предупреждения в журнале приложений. Вот как выглядит предупреждение:
Среда выполнения Commerce Server обнаружила, что было создано более # экземпляров объекта SiteConfigReadOnlyFreeThreaded. Создание множества экземпляров SiteConfigReadOnlyFreeThreaded отрицательно скажется на производительности сайта. Пожалуйста, обратитесь к документации Commerce Server для рекомендуемого использования объекта SiteConfigReadOnlyFreeThreaded.
Вы также увидите, что Том говорит использовать свойство Current объектов Context, чтобы избежать этой ошибки, примерно так:
ContentSelector cso = CommerceContext.Current.TargetingSystem.SelectionContexts["advertising"].GetSelector();
При этом повторно используется один и тот же экземпляр-одиночка, чтобы избежать повторного создания объекта SiteConfigReadOnlyFreeThreaded каждый раз, когда вы создаете экземпляр нового класса CommerceContext.
Со мной так далеко? Хорошо :) 1014 *
Вот что я действительно пытаюсь сделать: получить список всех групп страниц, настроенных в разделе «Маркетинг» Commerce Server. Насколько мне известно, вот единственный способ сделать это:
using (MarketingContext ctx = MarketingContext.Create("MyCommerceSite", "MyMarketingAuthorizationStore", AuthorizationMode.NoAuthorization))
{
PageGroup[] pageGroups = ctx.PageGroups.GetAllPageGroups();
}
Как вы можете видеть, я создаю класс MarketingContext, который также создает SiteConfigReadOnlyFreeThreaded в памяти, также каждый раз, когда он вызывается (что случается часто).
Есть ли способ получить список всех настроенных групп страниц без создания экземпляра совершенно нового объекта MarketingContext каждый раз, когда я хочу это сделать?