1

やむを得ずヒープ上に大量のデータを作成する C# .net 3.5 アプリケーションの場合、ハードウェアに関して、メモリに関して何を探す必要があるでしょうか? 最大のソケットバス幅でしょうか?それともメモリースティックの「帯域幅」ですか?または、それらが実行される実際の頻度は?

アプリケーションのボトルネックは避けられないという結論に達しました。スケールアップすると、作業が複数のスレッドに分散され、多くのスレッドが RAM にアクセスするために「衝突」が発生しているように見えます。

実際の問題は、アイテムがロックされ、多くのスレッドがこれらのアイテムにアクセスしようとすることに関係しています。スレッド ロックをさらに最適化する方法はありません。これはスレッド化に関連しているため、別の CPU の選択も調査し、QPI 統計を詳しく調べる必要があるかどうかはわかりませんでした。現在、Westmere アーキテクチャを使用していますが、クロック速度は 2GHz と遅いです。

編集:DMAが私たちを助けることができると示唆されています。

答えは C# 固有のものではないと思うので、これを C# および Java としてタグ付けします。

前もって感謝します、

4

1 に答える 1

1

より高速なマシンでアプリケーションをテストします。その音からすると、メモリ帯域幅がボトルネックなので、32 GB の 1600 MHz メモリなどを搭載した 4.5 GHz オーバークロック i7 を試してみます。1000円くらいで買えます。はるかに高速なシステムでは、ボトルネックが移動することがあります。

ところで: これを修正する時間が限られているように聞こえるので、C# でのオブジェクトの作成を回避できるとは思えませんが、達成できない可能性があります。Java では、1 日に 1 回未満の GC を実行する多数の高性能サーバーを作成しましたが、すべてのコア コードを目的を持って作成する必要があります。同様に、コードのクリティカル セクションをロックしないサービスを作成することもできますが、これを後で追加するのは簡単なことではありません。

于 2012-04-10T09:49:19.573 に答える