リソース管理

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

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

メモリとCPUの制限により、モバイル アプリケーションはリソースを効率的に使用する必要があります。このトピックでは、Universal Tracker SDKを使用する際にリソース割り当てを最適化するために適用できるリソース管理手法について説明します。

Universal Tracker SDKクラスのリソース管理

Universal Tracker SDKのほとんどのクラスとインターフェースは、純粋な管理対象オブジェクトです。ただし、セッションはネイティブ・リソースへの参照 (ネイティブ・ソケットを使用するHttpClientインスタンスへの参照など) を保持します。

管理対象外リソースを適切に処理するために、セッションはIDisposableインタフェースを実装します。これには次の要件があります。

  • セッションをローカル変数として使用する場合は、usingステートメントで宣言してインスタンス化する必要があります。これにより、Disposeメソッドが正しい方法で呼び出され、メソッドが呼び出されるとすぐにセッション オブジェクトがスコープ外になります。

    using (var session = SitecoreUTSessionBuilder.SessionWithHost("https://mysite.com")
                                                        .DefaultInteraction(defaultInteraction)
                                                        .BuildSession()
           )
    {
        // Send some requests
    }
  • セッションをクラスのインスタンス変数として格納する場合は、IDisposableインターフェイスを実装し、セッション オブジェクトを明示的に破棄する必要があります。

    void ReleaseResources()
    {
      if (null != this.session)
      {
        this.session.Dispose();
        this.session = null;
      }
    }
    
    public virtual void Dispose()
    {
      this.ReleaseResources();
      GC.SuppressFinalize(this);
    }
    
    ~MyClassThatUsesUTSession() 
    {
    }
メモ

アプリケーションがHttpClientを確実に破棄するには、セッションをusingブロックでラップします。そうしないと、アプリケーションがクラッシュし、メモリ警告またはToo many open files例外が発生する可能性があります。

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