私はC#(基本的にはマルチトラックエディター)でDSPアプリケーションを書いています。私はかなり長い間さまざまなマシンでプロファイリングを行ってきましたが、いくつかの「奇妙な」ことに気づきました。
私の自宅のマシンでは、再生ループの最初の実行は利用可能な時間の約50%〜60%を占め(JITがその仕事をしているためだと思います)、その後のループでは安定した5になります。 % 消費。問題は、低速のコンピューターでアプリケーションを実行すると、最初の実行に使用可能な時間よりも多くの時間がかかり、再生が中断され、出力オーディオが混乱することです。これは許容できません。その後、消費量は8%〜10%になります。
最初の実行後も、アプリケーションは時間のかかるルーチンを時々(2秒ごとに)呼び出し続けます。これにより、5%の安定した消費で、20%〜25%の非常に短いピークが発生します。アプリケーションをしばらく実行すると、これらのピークも7%〜10%に低下することに気づきました。(JITがコードのこれらの部分を再コンパイルしたことが原因かどうかはわかりません)。
ですから、私はJITに深刻な問題を抱えています。アプリケーションは非常に遅いマシンでも正常に動作しますが、これらの「コンパイルストーム」は大きな問題になります。私はこの問題を解決する方法を見つけようとしていて、起動時に事前にアプリケーションに「スクイーズ」するようにアプリケーションに指示する属性ですべての「賢明な」ルーチンをマークするというアイデアを思いつきました。 、したがって、本当に必要なときに完全に最適化されます。しかし、これは単なるアイデアであり(私もあまり好きではありません)、問題全体に対してより良い解決策があるのではないかと思います。
皆さんのご意見をお聞かせください。
(NGENアプリケーションはオプションではありません。私は、取得できるすべてのJIT最適化が好きで欲しいです。)
編集:
メモリ消費とガベージコレクションのキックは問題ではありません。オブジェクトプールを使用しており、再生中のメモリの最大ピークは304Kbです。