.net – 同时从磁盘读取或写入大文件而不是小块的缺点?
我的工作主要是基于
Windows和
Windows CE的系统,其中CreateFile,ReadFile和WriteFile是工作马,无论我是在Win32原生土地还是在托管的.Net土地上.
到目前为止,我从来没有在一个块中编写或读取大文件的任何明显问题,而不是循环直到处理几个较小的块.我通常将IO工作委托给后台线程,该线程在完成后通知我. 但是看一下文件IO教程或“教科书示例”,我经常会发现“使用小块的循环”而没有任何解释为什么它被使用而不是更明显(我敢说!)“一次完成”. 我做的方式有什么缺点,我还没有理解? 澄清: 通过大文件,我将我的单个块与多个块进行了比较.我提到的多个块示例通常在Windows CE上以1024字节的顺序具有块大小,在桌面上具有10倍的块大小.我的大文件通常是二进制文件,例如来自手机等的相机照片,因此大小顺序为2-10 MB.换句话说,不接近1 GB. 解决方法
通常,您不应该假设流将一次读取所有数据.虽然对于本地文件可能是真的,它可能不适用于网络文件……并且它肯定不适用于一般网络流,除非更高级别已经缓冲它们.
然后就是内存问题:假设有人要求你处理一个3GB的文件.如果你流式传输,一次处理一个块,你没有问题.如果你试图将整个事物读入记忆中,你就不可能成功…… 一般来说:如果你可以流式传输,那就行了.为什么要使用效率较低且效率较低的方法?对于任何类型的健壮性,您仍然必须检查Read的返回值并将其与您期望读取的数量进行比较…因此添加循环不会导致非常复杂.此外,如果你发现自己做了很多这样的事情,你很可能会发现你可以封装到辅助方法中的模式,很可能会让代表代表处理所采取的自定义操作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-server-2008 – 使用PowerShell在Windows Server 2
- 为Windows中的目录生成校验和
- 如何使用wamp在windows上烘焙cakephp 2.0应用程序
- 部署WDS服务实现无人值守安装Windows7
- 如何解决 Windows 实例出现身份验证错误及更正 CredSSP
- 如何在Windows中制作/比较文件系统/注册表快照?
- windows-server-2008 – 在Windows Server 2008 R2上查看计
- .net – 将Windows服务类添加到类库中
- windows – OS的文件缓冲有害吗?
- mcrypt在Windows / IIS上的PHP 5.6中不起作用