1. 行政

CommerceContextキャッシュを長時間実行可能なプロセスに最適化する

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

他のシステムとの統合Sitecore XC、長時間実行または大量のプロセスの開発を伴うことが多く、パフォーマンスに影響を与えることがあります。このトピックでは、CommerceContextキャッシュを統合カスタマイズで活用し、長時間実行されるタスクやプロセスのパフォーマンスを最適化する方法についての指針を提供します。

長時間実行中のタスクでは、CommerceContextキャッシュをリフレッシュすることでパフォーマンスを最適化できます。

!注CommerceContextキャッシュをリフレッシュする間隔は、最終的に実行されるワークロードによって異なります。一般的な指針として、特定のタスクの5回の反復ごとにリフレッシュすることをCommerceContext検討してください。リフレッシュ間隔はテスト結果に基づいて調整できます。

CommerceContextを更新します:

  • 長年続くプロセスコードに以下のスニペットを追加してください:

    var currentContext = new CommerceContext(CurrentContext.Logger, CurrentContext.TelemetryClient)    {     GlobalEnvironment = CurrentContext.GlobalEnvironment, Environment = CurrentContext.Environment, Headers = CurrentContext.Headers

         };

以下は、APIエンドポイントを使って任意の数のランダムなプライスカードを生成するコードサンプルを示しています。例の2つの主要なセクションは太字で示されています。この例では、5個のアイテムごとにコンテキストリフレッシュが開始されていることに注目してください。

/// The value. /// A HttpPut Route("AddBulkPriceCards()") public async Task AddBulkPriceCards(FromBody ODataActionParameters value) { if (!this.ModelState.IsValid || value == null) { return new ObjectResult("Invalid Model State"); ; } long.TryParse(value.ContainsKey("count") ? value"count".ToString() : "10000", out var countResult); var priceBookName = value"bookName".ToString(); var priceCardDisplayName = String.Empty; var priceCardDescription = String.Empty; var priceCardName = String.Empty; var command = this.Command(); var currentContext = new CommerceContext(CurrentContext.Logger, CurrentContext.TelemetryClient) { GlobalEnvironment = CurrentContext.GlobalEnvironment, Environment = CurrentContext.Environment, Headers = CurrentContext.Headers }; Stopwatch sw = new Stopwatch(); sw.Reset(); sw.Start(); for (long i = 0; i < countResult; i++) { priceCardName = "name_" + i; priceCardDescription = "description_" + i; priceCardDisplayName = "displayname_" + i; if (i % 5 == 0) { currentContext = new CommerceContext(CurrentContext.Logger, CurrentContext.TelemetryClient) { GlobalEnvironment = CurrentContext.GlobalEnvironment, Environment = CurrentContext.Environment, Headers = CurrentContext.Headers }; } await command.Process(currentContext, priceBookName, priceCardName, priceCardDisplayName, priceCardDescription); } sw.Stop(); return new ObjectResult($"Done, in {sw.Elapsed.ToString()} "); }

この記事を改善するための提案がある場合は、 お知らせください!