0

高頻度取引ソフトウェアに遅延を導入したくないと同時に、毎秒数千行のログを保存する必要があります。1 ミリ秒の遅延は膨大です。0.01 ~ 0.05 ミリ秒の遅延に同意するだけです。

*今*私は、起動時にメモリに 500 Mb を割り当て、そこにログを保存し、アプリケーションが終了したら、このログをディスクに置きます。

しかし今、私はより多くのログが必要であり、アプリケーションの実行中にログが必要であることに気付きました。そのため、アプリケーションの実行中にログを保存したいと考えています (おそらく 1 分に 1 回または 10 分に 1 回)。どのくらい遅いStreamWriter.WriteLineですか?「事前に割り当てられたコレクションに追加する」よりも遅くなりますか?

直接使用する必要がありますStreamWriter.WriteLine(同期か非同期か、AutoFlushオプションはパフォーマンスに影響しますか?)。またBlockingCollection、ログに項目を追加し、専用スレッドを使用してこのブロッキング コレクションを処理し、ログを別のスレッドでディスクに保存することもできます。

4

3 に答える 3

1

しないでください

  • 車輪の再発明

行う

  • ロギング フレームワークを使用する
  • ロガーと各ロガーのレベルを適切に構成する
  • メモリには同期ログを使用し (シンプルで高速ですが、ドライブへのイベントの永続性に問題があります)、 IO には非同期ログを使用します (正しく取得するのが難しく、遅く、テストが難しい) ロガー。

まだ行っていない場合は、log4netNLogを確認してください。ここから始めるとよいでしょう。

于 2012-07-22T20:27:59.987 に答える
0

おそらく、ログを循環バッファに保存し、共有メモリ内のそのバッファからディスクにデータを送信するだけの新しい実行スレッドを生成できます。

于 2012-07-22T19:59:32.020 に答える
0

Andre Calil が提案するように、log4net を使用します。SQL、ディスクなどにログを記録し、非常にカスタマイズ可能です。最初は少し複雑に思えるかもしれませんが、努力する価値はあります。

必要なのはおそらくRollingFileAppender. log4net は nuget にありますが、log4net サイトのドキュメントを読む必要があります。まず、アペンダーの設定を確認します。

于 2012-07-22T20:13:18.443 に答える