---
title: "リソース管理"
slug: "resource-management"
abstract: ""
---
# リソース管理

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