Tom Schultzのブログを見ると、独自のContextオブジェクト(CommerceContextオブジェクトなど)をインスタンス化すると、メモリ内に作成されたSiteConfigReadOnlyFreeThreadedクラスのインスタンスもインスタンス化され、できないと彼が言っていることがわかります。それを破壊するために何でもしなさい。これを十分な回数行うと、最終的にアプリケーションログに警告が表示されます。警告は次のようになります。
Commerce Serverランタイムは、SiteConfigReadOnlyFreeThreadedオブジェクトのインスタンスが#個以上作成されたことを検出しました。多くのSiteConfigReadOnlyFreeThreadedインスタンスを作成すると、サイトのパフォーマンスに悪影響を及ぼします。SiteConfigReadOnlyFreeThreadedオブジェクトの推奨される使用法については、CommerceServerのドキュメントを参照してください。
また、トムが次のように、このエラーを回避するためにContextオブジェクトのCurrentプロパティを使用するように言っていることもわかります。
ContentSelector cso = CommerceContext.Current.TargetingSystem.SelectionContexts["advertising"].GetSelector();
そうすることで、同じシングルトンインスタンスを再利用して、新しいCommerceContextクラスをインスタンス化するたびにSiteConfigReadOnlyFreeThreadedオブジェクトが再作成されないようにします。
これまで私と一緒に?良い :)
私が実際にやろうとしていることは次のとおりです。CommerceServerのマーケティングセクションで設定されているすべてのページグループのリストを取得します。私の知る限り、これを行う唯一の方法は次のとおりです。
using (MarketingContext ctx = MarketingContext.Create("MyCommerceSite", "MyMarketingAuthorizationStore", AuthorizationMode.NoAuthorization))
{
PageGroup[] pageGroups = ctx.PageGroups.GetAllPageGroups();
}
ご覧のとおり、MarketingContextクラスを作成しています。このクラスは、呼び出されるたびに(頻繁に発生する)、メモリ内にもSiteConfigReadOnlyFreeThreadedを作成します。
実行するたびにまったく新しいMarketingContextオブジェクトをインスタンス化せずに、構成されたすべてのページグループのリストを取得する方法はありますか?