リソース管理

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ブロックでラップしてください。そうしないと、メモリ警告や 「開いているファイルが多すぎる 」例外でクラッシュする可能性があります。

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