【发布时间】:2016-04-22 10:13:28
【问题描述】:
我需要一种极速记录的方法(有关高速摄像机的帧信息)。 它只是我需要记录的几个数字和一个简单的 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
-
@LasseV.Karlsen,我尝试了几种声明这个文件的组合,编译器不会接受我如何尝试声明它,ea fs filestream 变量在 camera_thread.FrameArived 中没有被识别为 fs isnt一个全局变量
-
我会使用一些日志库,比如 nlog
-
这已在 NLog 和 Log4Net 等日志框架中得到解决。两者都支持异步写入磁盘并支持从多个线程记录到单个文件。
标签: c# multithreading logging