Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 什么是;“缓冲区大小”;将文本流式传输到文件时的平均值_.net_Buffer - Fatal编程技术网

.net 什么是;“缓冲区大小”;将文本流式传输到文件时的平均值

.net 什么是;“缓冲区大小”;将文本流式传输到文件时的平均值,.net,buffer,.net,Buffer,我正在使用.NET中的类将大量文本输出到一个大文件中 缓冲区大小意味着什么?当将文本写入文件时,缓冲区大小如何影响速度和性能 令人惊讶的是,我无法通过简单的谷歌搜索找到答案。缓冲区大小是指写入文件之前要保存在内存中的字符数。此过程称为缓冲。基本假设是,写入文件比写入内存慢得多 有关详细信息,请参阅Wikipedia。写入文件需要使用winapi函数。注意函数签名,第二个参数是lpBuffer,一个包含需要写入的字节的缓冲区。第三个参数表示缓冲区中有多少字节 从技术上讲,一次只能写入一个字节。但这

我正在使用.NET中的类将大量文本输出到一个大文件中

缓冲区大小意味着什么?当将文本写入文件时,缓冲区大小如何影响速度和性能


令人惊讶的是,我无法通过简单的谷歌搜索找到答案。

缓冲区大小是指写入文件之前要保存在内存中的字符数。此过程称为
缓冲
。基本假设是,写入文件比写入内存慢得多


有关详细信息,请参阅Wikipedia。

写入文件需要使用winapi函数。注意函数签名,第二个参数是lpBuffer,一个包含需要写入的字节的缓冲区。第三个参数表示缓冲区中有多少字节

从技术上讲,一次只能写入一个字节。但这是低效的,WriteFile()不是一个非常便宜的函数。如果改为写一大块字节,效果会更好。对WriteFile的调用将大大减少

因此StreamWriter有一个字节[]数组作为缓冲区。调用Write/Line()时,它会将文本转换为字节,并将它们复制到该缓冲区中。非常快

直到数组满为止。然后它必须调用WriteFile()再次清空缓冲区。这种情况发生的频率完全取决于缓冲区的大小和写入的文本量

StreamWriter可以写入许多不同类型的流。它不一定只是磁盘上的一个文件。例如,您还可以使用它将文本写入网络流。或者在屏幕上。或者通过管道连接到另一个流程。或通过串行或USB端口连接到设备。或通过内存映射文件访问内存。等等,很多可能性

显然,在进行Write/Line()调用时,会发生完全不同的事情。如果使用不同大小的缓冲区,可以使程序工作得更为优化。最重要的是,Microsoft程序员无法预测您将如何使用StreamWriter。因此不知道什么缓冲区大小是“最好的”。他们不想把你画进一个角落,在那里你必须按照他们选择的缓冲区大小生活

所以你可以选择另一个尺码。默认值为1024字节。这是一个相当适中的大小,基于您将写入另一个也被缓冲的流的假设。与FileStream一样,写入文件时将使用的文件流。它有一个4096字节的缓冲区

如果您想知道哪种缓冲区大小最好,那么您必须进行实验。这是无法预测的,有太多的代码运行在引擎盖下,让你猜测它。但要注意的是,到目前为止,这种测试最常见的结果就是没有明显的效果。这是应该的,在所有合理的情况下,操作系统都有责任表现良好。当一个古怪的司机被牵涉进来时,你有很好的理由去尝试一下