C#を最大限に活かしこの特定の部コードしていないコンテキストスイッチ?
-
28-09-2019 - |
質問
私はタイムクリティカルなコマアプリです。なんのスレッドでの最優先課題と、その最も思います。
のあり方に示唆を与はなくなるコード実行このスレッドを中断することとして数倍の可能(以下"コンテキストスイッチが発生)?
のコードをほど複雑ではありません。その後のすべてのメソッドの呼び出しとinlinedコードを使わないものの高水準となLINQ).の業務の計算.が比較文字列(しようと考え方をどのようになります。半例を紹介しているとのint値と半分が表示されます。
このコードはx86.純4C#.運行シングルセノX3450W2008R2.シングルを入力します。
(残念ながらのデータからの3dパAPIに対応しておりませんx64(嫌いです!))
んごためかもしれな議論と経験を積んだ開発者向けです。
P.S.サーバはファイルにページングでハードページに誤りょうはない不要なIOます。
解決
コンテキストスイッチの観点から心配する必要がある唯一のことは、スレッドをブロックすることです。したがって、LINQ(つまり、Linqからオブジェクト、明らかにLinqからSQL、またはブロックを伴うものは何でも)の使用に問題はありません。いかなる種類の算術または呼び出し方法なども、スレッドをブロックしないため、コンテキストスイッチに影響を与えません。
コンテキストの切り替えに影響を与えるもう1つのことは、あなたが指摘したように優先されることです。しかし、スレッドの優先順位だけでなく、プロセスの優先事項もあります。使用できます SetPriorityClass プロセスの優先順位を高めるため ABOVE_NORMAL_PRIORITY_CLASS
(私はそれよりもそれを高くすることを気にしません)そして、あなたのスレッドの優先順位を通常より上に設定します。
ただし、一般的に、優先順位は本当に便利です。 タイミング (つまり、プロセスが外部入力(ネットワーク、ユーザー入力、ディスクI/O)にできるだけ速く応答するようにします)。実際には、CPUバウンドが同時に実行されている他のプロセスがない限り、実際にスレッドの実際のスループットにほとんど影響を与えません。しかし、もしそうなら、とにかく優先順位をいじることは実行可能な長期的な解決策ではありません。これは、プロセスの1つをより高い優先順位に設定することで、他のプロセスを完全に飢えさせ、それらが実行されないことがわかるためです。
とにかく、スレッドと処理の優先順位を調整する前に、私は慎重に物事を検討します。そして、いつものように、テスト、テスト、テスト!
他のヒント
まるでポすコードではなく、SetThreadPriority機能にも対応THREAD_PRIORITY_TIME_CRITICAL(以THREAD_PRIORITY_HIGHEST).
でも価値の向上に重点を処理するスレッドが実行実績優先によって組み合わせのスレッドとプロセス優先度).
るべきものとなることのないようにI/Oのスレッドがブロック).ですか-パ極きものとなることのないようにI/O電話その他のスレッド(一定の優先度のスレッ