.NET Compact Framework のスレッド処理
更新 : 2007 年 11 月
.NET Compact Framework では、主要なスレッド処理機能がサポートされていますが、.NET Framework の次の機能はサポートされていません。
現在のスレッド上にある圧縮されたスタックへのアクセス。
Win32 OVERLAPPED 構造体のマネージ表現。
実行コンテキストを管理するクラス。
セマフォの使用。
スレッド状態属性。
ハンドル取得以外の、ほとんどの待機ハンドル操作。
.NET Compact Framework では、Thread.Start メソッドと共に使用するための ThreadStart デリゲートと、Timer と共に使用するための TimerCallback デリゲートを使用できます。
次のスレッド処理メソッドを使用してタイムアウト パラメータを指定できます。
WaitHandle の WaitOne(Int32, Boolean) メソッド。
Thread の Join(Int32) メソッド。
スレッド プールの変更
.NET Compact Framework version 1.0 では、スレッド プール内の既定のスレッド最大数は 256 (スタック サイズは 64 KB) です。.NET Compact Framework version 2.0 およびそれ以降のバージョンでは、このスレッド最大数は 25 (スタック サイズは 128 KB) に削減されており、.NET Framework の機能により近くなっています。
スレッド プール内に使用可能なスレッドが存在しない場合は、HTTP 要求が失敗し、例外がスローされます。このような状況での主な例外を次の表に示します。
例外 |
条件 |
---|---|
ユーザーのコールバックをキューに配置できない |
|
処理を完了するための十分なスレッドがスレッド プール内に存在しない |
同時 Web 要求数を削減するか、スレッド プール内の最大許容スレッド数を増加させることにより、スレッドの不足を避けることができます。.NET Compact Framework 2.0 は、SetMaxThreads メソッドをサポートします。そのパラメータは、次の表のように指定します。
パラメータ |
説明 |
---|---|
workerThreads |
スレッド プール内のワーカー スレッドの最大数。これには任意の値を指定できます。 |
completionPortThreads |
スレッド プール内の非同期スレッドの最大数。現在、この値は .NET Compact Framework では無視されますが、1 ~ 1,000 の間で設定する必要があります。将来の互換性を考えて、.NET Framework の既定値である 500 に設定することをお勧めします。 |
.NET Compact Framework 1.0 を実行するデバイスでは、レジストリ設定を変更することによりスレッド プール内の許容スレッド最大数を削減できます。CFROOT\ThreadPool キーの MaxThreads を必要な値に設定します。このレジストリ キーは .NET Compact Framework の新バージョンでは使用されないことに注意してください。