極端な高速ロギング(高速カメラに関するフレーム情報)が必要です。 私はログに記録する必要がある数字と、単純なfile.logです。 これはイベントロギングが遅くなることです。マルチスレッドアプリケーションでファイルロギングを実行する方法
それで私は、ファイルストリームを作成して、アプリケーション用にファイルをロックできると思っていました。それに追加します。
通常、私は、このような方法で内部
Filestream fs = new FileStream(@"D:\Log.csv", FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
ような単純な線を使用します。
しかしカメラドライバのフレームは新しいスレッドでそれぞれ実行されるので、ここで問題が発生します。ログファイルが書き込まれるたびに、ファイルを再オープンして閉じる必要はありません。 (開閉が遅い)。
プログラムの最初にログファイルを開きたいと思います。スレッドは、書き込みを実行するだけで、何度も何度も閉じたり開いたりしないでください。そこいくつかの方法がありますが、ほとんどすべてではないが、特にマルチスレッド環境で、キューイングを伴う
using System.IO;
FileStream fs = new FileStream(@"D:\Log.txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
static void Main(string[] args)
{
// doing it in main doesn't work either.
fs = new FileStream(@"D:\Log.txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
//...
//.. init camera and start camera lots of code follows but is not related to the question.
}
Camera_Thread.FrameArrived (FrameArrivedEventArgs e)
{
byte[] n = MyFilterFunction(e.frame);
fs.WriteByte(MyArrayToString(n));
}
「うまくいきません」というのはかなり特殊です。実際の問題点を明確にしてください。 –
[TextWriterTraceListener]を使用しない理由(https://msdn.microsoft.com/en-us/library/system.diagnostics.textwritertracelistener%28v=vs.110%29.aspx) – qxg
@ LasseV.Karlsen、私はこのファイルを宣言するいくつかの組み合わせを試してみましたが、コンパイラは宣言しようとしましたが、fs filestream変数はcamera_thread.FrameArivedとして認識されませんでした(fs is notはグローバル変数です) – user3800527