加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门站长网 (https://www.0592zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

.net – 同时从磁盘读取或写入大文件而不是小块的缺点?

发布时间:2021-02-21 19:04:55 所属栏目:系统 来源:网络整理
导读:我的工作主要是基于 Windows和 Windows CE的系统,其中CreateFile,ReadFile和WriteFile是工作马,无论我是在Win32原生土地还是在托管的.Net土地上. 到目前为止,我从来没有在一个块中编写或读取大文件的任何明显问题,而不是循环直到处理几个较小的块.我通常将

我的工作主要是基于 Windows和 Windows CE的系统,其中CreateFile,ReadFile和WriteFile是工作马,无论我是在Win32原生土地还是在托管的.Net土地上.

到目前为止,我从来没有在一个块中编写或读取大文件的任何明显问题,而不是循环直到处理几个较小的块.我通常将IO工作委托给后台线程,该线程在完成后通知我.

但是看一下文件IO教程或“教科书示例”,我经常会发现“使用小块的循环”而没有任何解释为什么它被使用而不是更明显(我敢说!)“一次完成”.

我做的方式有什么缺点,我还没有理解?

澄清:

通过大文件,我将我的单个块与多个块进行了比较.我提到的多个块示例通常在Windows CE上以1024字节的顺序具有块大小,在桌面上具有10倍的块大小.我的大文件通常是二进制文件,例如来自手机等的相机照片,因此大小顺序为2-10 MB.换句话说,不接近1 GB.

解决方法

通常,您不应该假设流将一次读取所有数据.虽然对于本地文件可能是真的,它可能不适用于网络文件……并且它肯定不适用于一般网络流,除非更高级别已经缓冲它们.

然后就是内存问题:假设有人要求你处理一个3GB的文件.如果你流式传输,一次处理一个块,你没有问题.如果你试图将整个事物读入记忆中,你就不可能成功……

一般来说:如果你可以流式传输,那就行了.为什么要使用效率较低且效率较低的方法?对于任何类型的健壮性,您仍然必须检查Read的返回值并将其与您期望读取的数量进行比较…因此添加循环不会导致非常复杂.此外,如果你发现自己做了很多这样的事情,你很可能会发现你可以封装到辅助方法中的模式,很可能会让代表代表处理所采取的自定义操作.

(编辑:厦门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读