我有一个类需要保持BinaryWriter的实例在多个写函数调用上打开(数据是基于数据包的)。一旦编写了一定数量的数据/数据包,它还必须创建一个新文件。
通常我会关闭Binary Writer并使用新的文件路径重新实例化它,但与该操作相关的开销对我的应用来说太大了。我尝试在一个单独的线程中关闭编写器,但这会干扰我稍后创建的新实例。
我的最后一次尝试是根本不关闭Writer(和流),只是在每次编写所需的数据包时创建它的新实例。这似乎有效,并且不会导致任何内存泄漏,但我真的很想知道如果你这样做会发生什么。
这是我的(简化)代码来说明:
class Writer
{
BinaryWriter binWriter;
int bytesWritten;
int filesWritten;
const int maxFilesize = 10E9;
Writer(string filepath)
{
binWriter = new BinaryWriter(File.Open(filepath, FileMode.Create));
bytesWritten = 0;
filesWritten = 0;
}
WritePacket(byte[] packet)
{
if(bytesWritten<maxFileSize)
{
binWriter.Write(packet);
bytesWritten += packet.Length;
}
else
{
// this is where I'd normally call Dispose(), but the overhead
// is too high, and disposing the stream in a seperate thread
// interferes with the new one
// what actually happens here? it's the only thing I've found to
//work...
filesWritten++;
binWriter = new BinaryWriter(File.Open(filepath + filesWritten, FileMode.Create));
}
}
感觉很糟糕,但这是迄今为止唯一有效的解决方案。任何见解都会很棒!