微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

最佳文件缓冲区读取大小?

我正在写一个需要阅读相当大的文件的应用程序。 我一直想知道现代Windows XP计算机上读取缓冲区的最佳大小。 我search了一下,发现了很多例子,其中最佳尺寸为1024。

这里是我的意思的片段:

long pointer = 0; buffer = new byte[1024]; // What's a good size here ? while (pointer < input.Length) { pointer += input.Read(buffer,buffer.Length); }

我的应用程序相当简单,所以我不想写任何基准代码,但想知道什么尺寸是常见的?

在单线程上调用WaitHandle

将UNCpath转换为C#中的本地path

桌面通知程序没有可见的forms给用户

获取当前login的Windows用户

我在哪里可以find在.NET中开发的Windows服务的生命周期的详细视图?

Mono应用程序在尝试更改控制台前景色时失败,并出现ArgumentNullException

multidatatrigger的Enteraction中的ColorAnimation在项目添加到ListView时不会触发

带定时器的Windows服务

如何确定某个位置的.NET应用程序实例是否正在运行?

exe_common.inl中的非法指令

一个1K的缓冲区大小似乎有点小。 一般来说,没有“一刀切”的缓冲区大小。 您需要设置适合您算法行为的缓冲区大小。 现在,一般来说,拥有一个真正巨大的缓冲区并不是一个好主意,但是,如果有一个太小或者不符合你处理每个块的方式,那么这个缓冲区也不是那么好。

如果你只是在处理数据之前把数据一块接一块地全部读入内存,我会使用一个更大的缓冲区。 我可能会使用8K或16K,但可能不会更大。

另一方面,如果您正在以流方式处理数据,那么读取一个块然后在读取下一个较小的缓冲区之前处理它可能会更有用。 更妙的是,如果您正在流式传输具有结构的数据,那么我会更改读取的数据量,使其与您正在阅读的数据类型特别匹配。 例如,如果您正在读取包含4个字符的代码一个浮点数和一个字符串的二进制数据,则会将四个字符的代码读入一个4字节的数组以及浮点数。 我会读取字符串的长度,然后创建一个缓冲区来一次读取整个字符串数据块。

如果你正在做流数据处理,我会查看BinaryReader和BinaryWriter类。 这些允许你很容易地处理二进制数据,而不必担心数据本身。 它还允许您将缓冲区大小与正在使用的实际数据分离。 您可以在基础流上设置一个16k缓冲区,并轻松地使用BinaryReader读取各个数据值。

取决于您在访问时间和内存使用情况之间的界限。 缓冲区越大,速度越快 – 但内存方面的成本更高。 读取文件系统簇大小的倍数可能是最有效的,在使用NTFS的Windows XP系统中,4K是认簇大小。

你可以看到这个链接NTFS,FAT和exFAT的认簇大小

再见。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐