0

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オブジェクトをインスタンス化せずに、構成されたすべてのページグループのリストを取得する方法はありますか?

4

1 に答える 1

0

私はいくつかの掘り下げを行い、次のことを見つけました。

デフォルトでは、Microsoft はこれらの警告のしきい値をエラー ログに記録する場合でも 100 に設定しています。これらの警告の数が一貫して 100 未満である場合、これらの警告は完全に無害であることがわかります。

私の場合、エラーを表示するためのしきい値を 2 に設定しました。これは、それが有効な問題であるかどうかに関係なく、発生したすべてのインスタンスを表示するためです。制限を 100 に戻したような気がしますが、これまでのところ悪影響は見られません。

于 2009-09-21T22:38:28.267 に答える