3

C#と.NET 2.0で開発された大量のファイルを処理するWindowsサービスのパフォーマンスを向上させようとしています。私は毎秒多くのファイルを処理したい。データベースまたはメモリからのクエリですか?どちらが速いの?

このプロセスでは、各ファイルに対して、サービスはデータベースクエリを実行してシステムの一部のパラメータを取得します。

これらのパラメータは毎年変わります。これらのパラメータをシングルトンとしてロードし、このシングルトンを定期的にリフレッシュすると、パフォーマンスが向上すると考えています。処理される各ファイルのデータベースクエリを作成する代わりに、メモリからパラメータを取得します。

シナリオを完了するには:Windows Server 2008 R2 64ビットを使用していますが、SQL Server 2008はデータベースで、C#および.NET 2.0は既に説明しました。

私のアプローチは正しいですか?あなたならどうしますか?

ありがとうございます!

+0

右の音...他に何が答えるか分からない? :P – FarligOpptreden

+0

私には良いアイデアのように聞こえます。キャッシングシステムは効率的です。 – ken2k

+0

私はそれがあなたが保存する必要がどのくらいのものに依存すると思う。少量のデータであれば、それをメモリに保存してください。メモリは常に高速で、次にハードディスクが読み込まれます。 SQL Serverはバッファリングされた状態を維持するうえで優れた作業を行いますが、すべてを自分で保管すると常にメモリに格納されます。 どれくらいのトレードオフが得られるかわかりません。 .net EQATECプロファイラ(無料版)を使用して、クエリをメモリ読み込みと比較します。 – JeremyK

答えて

3

これらのパラメータは、はい、メモリにキャッシュしないanually

変更します。特にそれらが大きくて複雑な場合。

正確さに応じて、適切な時期に1年に1回無効にしてください。

単純に1時間または数分間キャッシングするだけで良い妥協点かもしれません。

1

ネットワーク越しやディスクへのアクセスは、メモリアクセスよりも常に遅くなります。

データベースはメモリにデータをキャッシュすることができるため、ネットワークを通過していない場合はデータベースになる可能性があります。データアクセスパターン/インデックスなどが高速になる可能性があります。コード。しかし、これが最善のケースです。高速化が必要な場合は、メモリキャッシュの助けを借りてください。

しかし、メモリキャッシュでは複雑さとバグが追加される可能性があることに注意してください。キャッシュされたデータのライフタイム、リフレッシュ方法と複雑さ、さらにはより厄介なエッジケースの状態バグを判断する必要があります。彼らは毎年変わりますが、あなたはそのカスプを扱わなければなりません。

+0

ありがとう@bryanmac。私の場合、私はネットワークを横断します。そして、複雑さのアドバイスに感謝します。 –

1

RAMメモリ・データ・アクセスは、レジストリとCPUキャッシュ

のようなCPUメモリはChachingはそうはい、そのクエリをキャッシュする、あなたはそれを毎分を変更しても速くなりより除いて、間違いなく他のデータ・アクセスその速くなります非常に速いです

関連する問題