NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

System.IO 的新特性和性能改进

  • 2009-10-15
  • 本文字数:860 字

    阅读完需:约 3 分钟

微软打算为核心的 System.IO 功能提供一些简单却极受欢迎的性能改进。包括读写文本文件的便捷方法,快速地列举目录,对内存映射文件的支持。

第一个改进是,替换 File.ReadAllLines 这个原有的便捷方法。对于小文件而言,这是一个很好用的函数,但随着文件大小增大就会出现问题。根本的缺陷在于,ReadAllLines 会暂停程序的运行直到整个文件都被读到字符串数组中。

替代的方法是 File.ReadLines,其返回一个字符串枚举器。这种用延迟模式来读取文件方式,犹如使用低级的流对象一样。也为 File.WriteAllLines 和 File.AppendAllLines 提供了新的重载,两者可以接受枚举器而非数组作为参数。

DirectoryInfo.GetFiles 具有同样的数组问题,不过它们还带来了更为严重的问题。在获取文件列表的时候,Win32 API 也同时会返回诸如大小和最后编辑日期这样的基本信息。不幸的是,这些信息被.NET 遗弃了,而由 FileInfo 对象来保存这些信息。所以,在程序开始遍历这些文件的时候,假设为了确定目录的总大小,就必须逐一重新查询文件系统。这就是一个经典的 1+N 优化问题。DirectoryInfo.GetFiles 和新的 DirectoryInfo.EnumerateFiles 都修复了这个问题。

另外一个针对.NET 的重要的性能改进是,对内存映射文件的支持。内存映射文件是把一块内存连接到一个文件的操作系统特性。一旦连接起来,你就能读写文件的任意部分,就像它已经不再是非托管内存数组了。操作系统会处理一些重要的细节问题,如把文件的不同部分分页到内存上,并在需要的时候从内存里提取出来。内存映射文件让应用程序可以操作非常庞大的文件,甚至上G 的文件也可高效地处理。

另外,对于底层文件I/O,内存映射文件提供了强大的方法来与进程通信。如果两个应用程序打开了同一个内存映射文件,那么某个应用程序做出的改变会立即反映给另外一个应用程序。

尽管名称如此,内存映射文件并不需要一个真正的文件。它们可以是一些纯粹的内存对象,只要不用于后备存储。在应用程序内,这个潜在好处,特别适合于解决跨进程通信的问题。

查看英文原文: New Features and Performance Improvements for System.IO

2009-10-15 02:301649
用户头像

发布了 254 篇内容, 共 53.6 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

字节跳动最新开源!超实用的UI轮子库,我只是个轮子搬运工

android 程序员 移动开发

工作出现瓶颈,学习效率下降?通学这份Android进阶知识体系

android 程序员 移动开发

字节跳动正式启动2021届秋季校招!这份字节跳动历年校招Android面试真题解析,你确定不收藏

android 程序员 移动开发

孽缘啊,同套面试题中午我把你挂了,晚上你把我挂了,农民工看完都会了

android 程序员 移动开发

安卓指纹对称加密及登录功能的实现,阿里P8大牛从零开始教Android开源框架

android 程序员 移动开发

小厂开发五年,成功入职腾讯,这是我的复盘和总结,阿里P8Android架构师谈

android 程序员 移动开发

巧用Android网络通信技术,在网络上直接传输对象(1),讲的真详细

android 程序员 移动开发

巧用Android网络通信技术,在网络上直接传输对象(2),android开发入门基础教程

android 程序员 移动开发

巧用Android网络通信技术,在网络上直接传输对象,android设计模式总结

android 程序员 移动开发

已拿字节、腾讯、墨墨 offer,【面试总结

android 程序员 移动开发

带你一起探究Android事件分发机制,-让面试提问不在畏惧!

android 程序员 移动开发

字节面试官:看了3000多份简历,面试1000场后,androidjni开发书籍

android 程序员 移动开发

学习 View 事件分发,就像外地人上了黑车!(1),kotlin安卓开发书籍

android 程序员 移动开发

学习不系统学过的Android知识全忘记了?思维导图+手写笔记

android 程序员 移动开发

实现Flutter离线验证码组件,跳槽面试大厂被拒

android 程序员 移动开发

年后想跳槽涨薪?你想要的面试题全在这里,activity事件分发

android 程序员 移动开发

字节跳动技术整理:Android-Camera内存问题剖析,为什么Flutter能最好地改变移动开发

android 程序员 移动开发

字节跳动面试,第三面挂了,这原因我服了,快速上手

android 程序员 移动开发

学习 View 事件分发,就像外地人上了黑车!,真的已经讲烂了

android 程序员 移动开发

完美!腾讯技术官发布Android零基础就业宝典,不用再怀疑人生了

android 程序员 移动开发

已经说过千万遍了!!面试官,一线互联网大厂中高级Android面试真题收录

android 程序员 移动开发

干货来袭-通过这份Android-中高级架构师教学资料(全套)在公司大裁员下

android 程序员 移动开发

屌丝的眼泪,因为错过的初恋,才搞清楚PNG图片压缩原理

android 程序员 移动开发

字节跳动厂内部超高质量Flutter+Kotlin笔记!技术与实战篇

android 程序员 移动开发

学会这些Android开发热门前沿知识,2020年你就不用愁了!

android 程序员 移动开发

安卓11重磅上线,快来看看,是不是熟悉的配方,大专生面试阿里P7居然过了

android 程序员 移动开发

安卓指纹对称加密及登录功能的实现(1),技术实现

android 程序员 移动开发

对标小程序 _ _快应用_开发入门指南,移动应用开发课程设计

android 程序员 移动开发

巧用Android网络通信技术,在网络上直接传输对象 (1),安卓面试题宝典app

android 程序员 移动开发

字节跳动1面Too simple2面怀疑人生,宅家修炼“65天,flutter开源项目集合

android 程序员 移动开发

屌丝的眼泪,因为错过的初恋,才搞清楚PNG图片压缩原理(1)

android 程序员 移动开发

System.IO的新特性和性能改进_.NET_Jonathan Allen_InfoQ精选文章