C# 如何用0xFF字节填充MemoryStream?

C# 如何用0xFF字节填充MemoryStream?,c#,padding,memorystream,C#,Padding,Memorystream,我有一个MemoryStream,它是在运行时从文件创建的 然后编辑内存流,并删除一些字节 现在我必须保持一个恒定的文件大小,所以我必须用0xFF字节填充MemoryStream 进行此操作的最快方法是什么 我知道,我总是可以循环使用MemoryStream大小并添加0xFF,但我需要知道一种更快更有效的方法 如果有许多字节要写入流,则写入数组可能比单独写入每个字节更有效: static void Fill(this Stream stream, byte value, int count) {

我有一个
MemoryStream
,它是在运行时从文件创建的

然后编辑
内存流
,并删除一些字节

现在我必须保持一个恒定的文件大小,所以我必须用0xFF字节填充
MemoryStream

进行此操作的最快方法是什么


我知道,我总是可以循环使用
MemoryStream
大小并添加0xFF,但我需要知道一种更快更有效的方法

如果有许多字节要写入流,则写入数组可能比单独写入每个字节更有效:

static void Fill(this Stream stream, byte value, int count)
{
    var buffer = new byte[64];
    for (int i = 0; i < buffer.Length; i++)
    {
        buffer[i] = value;
    }
    while (count > buffer.Length)
    {
        stream.Write(buffer, 0, buffer.Length);
        count -= buffer.Length;
    }
    stream.Write(buffer, 0, count);
}
静态空白填充(此流、字节值、整数计数)
{
var buffer=新字节[64];
for(int i=0;i缓冲区长度)
{
stream.Write(buffer,0,buffer.Length);
计数-=缓冲区长度;
}
stream.Write(缓冲区,0,计数);
}

如果要向流中写入多个字节,则写入数组可能比单独写入每个字节更有效:

static void Fill(this Stream stream, byte value, int count)
{
    var buffer = new byte[64];
    for (int i = 0; i < buffer.Length; i++)
    {
        buffer[i] = value;
    }
    while (count > buffer.Length)
    {
        stream.Write(buffer, 0, buffer.Length);
        count -= buffer.Length;
    }
    stream.Write(buffer, 0, count);
}
静态空白填充(此流、字节值、整数计数)
{
var buffer=新字节[64];
for(int i=0;i缓冲区长度)
{
stream.Write(buffer,0,buffer.Length);
计数-=缓冲区长度;
}
stream.Write(缓冲区,0,计数);
}

如果您想要性能,那么我将使用字节数组而不是内存流afaik,
MemoryStream
=对
ByteArray
进行流操作。因此性能不会受到太大影响。您必须在内存中保持恒定的文件大小吗?还是只有将MemoryStream写回磁盘时,文件大小才重要?@Hans是的,我必须在内存中保持一个恒定的大小…我不会在添加0xFF后写入文件,因为还有一些工作要做。这是一个微观优化。这只是一个有趣的过程,因此您将了解到,当仅读取文件就需要数百毫秒时,节省几微秒是毫无意义的。不管你怎么努力,你都看不出有什么不同。如果你想要性能,那么我会使用字节数组而不是内存流faik,
MemoryStream
=对
ByteArray
进行流操作。所以性能不会受到太大的影响。你必须在内存中保持恒定的文件大小吗?还是只有将MemoryStream写回磁盘时,文件大小才重要?@Hans是的,我必须在内存中保持一个恒定的大小…我不会在添加0xFF后写入文件,因为还有一些工作要做。这是一个微观优化。这只是一个有趣的过程,因此您将了解到,当仅读取文件就需要数百毫秒时,节省几微秒是毫无意义的。不管你怎么努力,你都看不出区别。在第10行“
stream.Write(buffer,0,buffer.Length);
”,为什么偏移量为0??字节应该添加到流的末尾!请看文档的。哦!不知道偏移量在缓冲区中![我以前从未使用过仅写方法!]在第10行“
stream.Write(buffer,0,buffer.Length);
”,为什么偏移量为0??字节应该添加到流的末尾!请看文档的。哦!不知道偏移量在缓冲区中![我以前从未使用过“只写”方法!]