覆盖BinaryWriter C#的实例

时间:2017-08-31 16:30:39

标签: c# stream

我有一个类需要保持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));
        }
   }

感觉很糟糕,但这是迄今为止唯一有效的解决方案。任何见解都会很棒!

0 个答案:

没有答案