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
    
         };

例: CommerceContextを更新する方法

次に、APIエンドポイントを使用して任意の数のランダムな価格カードを生成するコード サンプルを示します。この例の2つの主要なセクションは太字でマークされています。この例では、コンテキストの更新が5番目の項目ごとに開始されることに注意してください。

       /// <param name="value">The value.</param>
        /// <returns>A <see cref="CommerceCommand"/></returns>
        [HttpPut]
        [Route("AddBulkPriceCards()")]
        public async Task<IActionResult> 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<AddPriceCardCommand>();
            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()} ");
        }
この記事を改善するための提案がある場合は、 お知らせください!