---
title: コルーチンの分析
product: Unity Editor
version: '6000.0'
latest_version: '7000.0'
status: This page documents version 6000.0. The latest version is 7000.0.
canonical: https://docs.unity.com/ja-jp/engine/6000.0/manual/scripting/object-oriented-development/coroutines-section/coroutines-analyzing
latest_url: https://docs.unity.com/ja-jp/engine/7000.0/manual/scripting/object-oriented-development/coroutines-section/coroutines-analyzing.md
generated_at: 2026-11-14T04:54:56.581Z
locale: ja-jp
---

# コルーチンの分析

> Unity プロファイラーでコルーチンパフォーマンスを分析する。

コルーチンは、他のスクリプトコードとは異なる方法で実行されます。Unity のほとんどのスクリプトコードは、パフォーマンストレース内の特定のコールバック呼び出しの下の一箇所に表示されます。ただし、コルーチンの CPU コードは常にトレースの 2 箇所に表示されます。

* コルーチンの開始から最初の `yield` ステートメントまでのコルーチン内のすべての初期コードは、Unity がコルーチンを開始するたびにトレースに表示されます。初期コードは、[`StartCoroutine`](/engine/6000.0/script-reference/unityengine/monobehaviour/startcoroutine.md) メソッドが呼び出されるときに最も頻繁に表示されます。Unity コールバックが生成するコルーチン (`IEnumerator` を返す `Start` コールバックなど) は、それぞれの Unity コールバック内に最初に表示されます。

* コルーチンのコードの残り (最初に再開してから実行が終了するまで) は、Unity のメインループ内の`DelayedCallManager`行に表示されます。これは、Unity がコルーチンを実行する方法が原因です。[C# コンパイラー](/engine/6000.0/manual/scripting/environment-and-tools/overview-of-dot-net-in-unity.md)は、コルーチンを戻すクラスのインスタンスを自動生成します。Unity はこのオブジェクトを使用して、1 つのメソッドの複数の呼び出しにわたってコルーチンのステートを追跡します。コルーチン内のローカルスコープ変数は`yield`呼び出しにまたがって存続する必要があるため、Unity はローカル変数のスコープを生成されたクラスに上げ、コルーチン中はヒープに割り当てられたままになります。また、このオブジェクトはコルーチンの内部ステートを追跡し、コードのどの時点で、イールド後にコルーチンを再開する必要があるかを記憶します。

これらの理由から、コルーチンの開始時に割り当てられるメモリは、固定オーバーヘッドヘッドアロケーションにローカル変数のサイズを加えた値になります。

コルーチンを開始するコードはオブジェクトを構築して呼び出し、コルーチンの`yield`条件が満たされるたびに Unity の`DelayedCallManager`がそれを再度呼び出します。コルーチンは通常、他のコルーチンの外部で開始するため、実行オーバーヘッドは`yield`コールと`DelayedCallManager`で分割されます。

## コルーチンパフォーマンスの監視と向上##monitor-and-improve-coroutine-performance

Unity プロファイラーを使用して、アプリケーションのどこで Unity がコルーチンを実行するかを検査し、理解できます。これを行うには、[ディーププロファイリング](/engine/6000.0/manual/analysis/profiler/deep-profiling.md)を有効にしてアプリケーションをプロファイルします。これにより、スクリプトコードのすべての部分がプロファイルされ、すべての機能呼び出しが記録されます。その後、[CPU Usage プロファイラーモジュール](/engine/6000.0/manual/analysis/profiler/visualizing-data/cpu/cpu.md)を使用して、アプリケーションのコルーチンを調査できます。


**Profiler session with a coroutine in a DelayedCall:**
![](/api/media?file=/engine/6000.0/media/images/coroutines-cpu-profiler.png)

一連の操作は、個々のコルーチンの数をできるだけ少なくすることが推奨されます。ネスト状のコルーチンはコードの明確化とメンテナンスに役立ちますが、コルーチンがオブジェクトを追跡するため、メモリーオーバーヘッドが大きくなります。

コルーチンがすべてのフレームで実行され、長時間実行される操作に`yield`しない場合は、`Update` または `LateUpdate` コールバックに置き換える方がパフォーマンスが高くなります。これは、長時間実行または無限にループするコルーチンがある場合に便利です。

## 追加リソース##additional-resources

* [コルーチン API リファレンス](/engine/6000.0/script-reference/unityengine/coroutine.md)
* [Unity プロファイラー](/engine/6000.0/manual/analysis/profiler.md)
