(Commerce Server) Как получить PageGroup [] без создания нового объекта MarketingContext - PullRequest
0 голосов
/ 18 сентября 2009

Если вы посмотрите на Блог Тома Шульца , вы увидите, что он говорит, что если вы создаете экземпляр своих собственных объектов 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 каждый раз, когда я хочу это сделать?

1 Ответ

0 голосов
/ 22 сентября 2009

Я немного покопался и нашел следующее:

По умолчанию Microsoft устанавливает пороговое значение для этих предупреждений, даже появляющихся в журнале ошибок, равным 100. Получается, что эти предупреждения абсолютно безобидны, если их количество постоянно меньше 100.

В моем случае я установил порог для отображения ошибок равным 2, просто чтобы показать каждый всплывающий экземпляр, независимо от того, была ли это действительная проблема или нет. Я чувствую, что снова поднял предел до 100, и пока не видел никаких негативных последствий.

...