0

何かアドバイスをいただければ幸いです。私はまだc#で学習しているので、明らかなことを見逃してしまった場合はお詫び申し上げます。私はVS2010を使用しており、アプリケーションはnet2.0を使用しています

私はこれらの2つのプロセスを可能な限りスピードアップすることを目指しています。最初のプロセスは、サーバーからデータテーブルを読み込み、それらをキャッシュファイルとして保存することです。各キャッシュファイルには複数のデータテーブルがあります。2番目の部分は、キャッシュファイルからこれらのデータテーブルを取得し、データセットに保存することです。

元々、プロセスはデータテーブルをXMLファイルとして保存していましたが、これにはキャッシュファイルの作成と取得の両方で永遠に時間がかかりました。アプリケーションを実行するとき。これらのテーブルのサイズは、10MBから400MBの範囲です。

ローカルマシンとの間でキャッシュファイルをビルドして読み取るように設定しました。

バイナリシリアル化を使用してみましたが、これはかなり役に立ちました。テーブルをXMLファイルサイズの約1/6に減らし、さらに高速化しましたが、もっと速いものがあるかどうかを調べています。しばらく探していましたが、他に何も見つかりません。protobuf-netをチェックしました。これは、シリアル化を高速化するための素晴らしい方法のように見えますが、データテーブルがうまく機能していないことがわかりました。

ここにいくつかの数字があります。

Time to build Cache files:
XML-about 2 hours, 
Binary -  about 1 hour

Test Case for reading from Cache file:
XML - 3m 40s, 
Binary - 2m 20s

これは大量のデータであり、多くを期待することはできませんが、別の方法はありますか?

4

2 に答える 2

1

最適化の最初のルールは、時間が費やされている場所を測定することです。時はシリアル化コードにあると推測するのは良いことかもしれませんが、確かに良いプロファイラーセッションのようなものはありません...

そうは言っても、シリアル化メカニズムを変更したときに見られるパフォーマンスの向上は、シリアル化自体に少なくともかなりの時間が費やされていることを示しています。

XMLシリアライザーは、大きなファイルの場合はひどく遅くなります。BinaryFormatterの方が優れていますが、それでも正確にはスピードデーモンではありません。

プロトコルバッファは約6倍高速で、BinaryFormatterよりもはるかにコンパクトなデータを格納します。

http://theburningmonk.com/2011/08/performance-test-binaryformatter-vs-protobuf-net/

ここに画像の説明を入力してください

(Stack Overflowの) Marc Gravellは、.NETでプロトコルバッファの実装を作成しました

http://code.google.com/p/protobuf-net/

これは、NuGetを使用して取得できます。

Jon Skeet も同様でしたが、私はMarcの実装を好みます)。

もあります

ADO.NETDataTablesとDataReadersを効率的でポータブルなバイナリ形式にシリアル化するためのライブラリ。MarcGravellのGoogleProtocolBuffersライブラリであるprotobuf-netを使用します。

https://nuget.org/packages/protobuf-net-data/2.0.5.480

(NuGetからも利用可能)

于 2012-07-25T16:57:50.250 に答える
0

このような問題での私にとっての最初のステップは、dotTraceANTSなどのソフトウェアを分解することです。これらのソフトウェアは、個々のメソッド呼び出しにかかる時間までプロファイリングするのに最適です。ストレスポイントを特定することもできます。個々のメソッドが1,000万回呼び出されている場合は、数ミリ秒短縮すると大幅な節約になります。

また、SQLの実行プランを調べて、それらを何らかの方法で最適化できるかどうかを判断することをお勧めします。そのための記事がgoogleにたくさんあります。

もう1つのオプションは、C#ストップウォッチを利用することです。これでコードのブロックをラップすると、ボトルネックを特定するのに役立つ場合があります。

于 2012-07-25T16:57:05.533 に答える