以前、別のフレームワークからコピーした簡単なログヘルプクラスを書きましたが、そのテストは使いやすくありません。以下のように:
本記事では、BlockingCollectionに基づくシンプルなログクラスを再実装します。
BlockingCollection<T>は、以下の機能を提供するスレッド安全なコレクションクラスです:
メイカー・ユーザーモデルを実装しましょう。 マルチスレッドを通じてアイテムを追加・取得できます。 オプションで最大収容能力を設定。 コレクションが空または満杯の場合、挿入および削除操作によってブロックされます。 挿入および削除の試みはブロックされず、指定された時間の間も発生しません。 カプセル化はIProducerConsumerCollection<T>の任意のコレクションタイプを実装します キャンセルアクションを実行するにはキャンセルタグを使ってください。 foreach(Visual BasicではFor Each)を使う2種類の列挙がサポートされています:読み取り専用列挙です。 列挙は、項目が列挙されたときにその項目を削除するものです。
マイクロソフトは以下のことを発表します:ハイパーリンクのログインが見えます。
BlockingCollectionはスレッド安全なブロッキングキューであり、この機能を使ってプロセス内でプロデューサー-コンシューマーモード(メッセージ転送やログ記録など)を実装しています。
Addメソッドを呼び出してキューに情報を追加し、キューにメッセージがなければ、IsCompletedは常にwhileループをブロックし、デッドループを発生させません。 新しいメッセージが出ると、iCompletedの「while」がトリガーされ、ブール型を返すことで実行が続き、つまりスレッドからデータを取得します。
以前は、ManualResetEventのWaitOneメソッドを呼び出し、SetメソッドとSetメソッドを呼び出して信号を渡すことでスレッドをブロックしました。以下の通りです。
このテストは10,000件のログを書き込み、10ミリ秒未満で完了します、下図に示されているように:
コードは以下の通りです:
ソースコードダウンロード:
観光客の皆さん、この投稿の隠された内容を見たい方は、どうぞ 答える
|