1

作成者がアプリケーションの作業を停止してから、私は数年間アプリケーションを維持しています。このアプリケーションは、サイズ変更、テキストの適用、ロゴの追加など、大量の画像に対してバッチ操作を実行します。

最近、効率を改善し、使用可能なすべてのメモリを使用して操作を複数のスレッドに分割することにより、システムのすべての機能を完全に使用するために、このアプリケーションを書き直しています。

以前のメンテナは、UIスレッドで長い操作を実行する(操作不能にした停止ボタンをレンダリングする)、非常に小さなスレッドプールを使用するなど、ややひどい方法でマルチスレッドを実装していました。

だから私はコードを最適化し、スレッドプールのサイズを増やしてみましたが、どうやら何も改善されていないようです。ボトルネックはディスクの読み取りと書き込みのようです。

この状況を改善する方法はありますか?

4

1 に答える 1

1

アプリケーションが現在実行しているIOを正確に判別します。次に、それをシーケンシャルアクセスパターンに変換してみます。ランダムIOは、磁気ディスクでは100倍遅く、SSDでは10倍遅くなります。

磁気ディスクの場合は、一度に1つのスレッドだけが順番に書き込むようにしてください。ランダムなIO調整を強制される場合は、最適なキューの長さを調整してください。

于 2013-03-09T12:31:24.970 に答える