最終更新:2018-04-27 (金) 15:19:11 (2183d)  

.NET Framework/スレッド
Top / .NET Framework / スレッド

マルチスレッドの方法

Thread

普通の書き方

  • System.Threading.Thread t1 = new System.Threading.Thread(
        ThreadStart(処理する関数名));

匿名メソッド (C♯ 2.0)

  • ThreadStartデリゲートへの暗黙の変換
    System.Threading.Thread t1 = new System.Threading.Thread(
        delegate()
        {
            System.Console.Write("Hello, ");
            System.Console.WriteLine("World!");
        });

ラムダ式 (C♯ 3.0)

  • System.Threading.Thread t1 = new System.Threading.Thread(
        () => {
            System.Console.Write("Hello, ");
            System.Console.WriteLine("World!");
        });
    });

ThreadPool

  • System.Threading.ThreadPool
  • スレッドをいくつか事前に立ち上げといて、使いまわすことで、スレッド作成の時間を短縮させる

非同期デリゲート

System.Threading.Tasks.Task

メモ

  • スレッドを1つ生成すると、約1Mbytesのメモリを消費するし(=空間的なコスト)、スレッドの生成/破棄のたびにプロセス内にロードされている全ての.dllファイルのDllMain関数が呼び出される

対策

種類

フォアグラウンドスレッド

  • メインスレッド
  • Threadクラスを用いて作成したスレッド
  • このスレッドが動作している間はApplication.Exit()などで抜けたとしてもプロセスは終了しない

バックグラウンドスレッド

  • ThreadPool
  • すべてのフォアグラウンドスレッドが終了すると 強制的に終了

参考