---
title: "CommerceContextキャッシュを長時間実行可能なプロセスに最適化する"
slug: "optimize-the-commercecontext-cache-for-a-long-running-process"
abstract: ""
---
# CommerceContextキャッシュを長時間実行可能なプロセスに最適化する

他のシステムとの統合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()} ");
 }