亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

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:301653
用户头像

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

关注

评论

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

AutoCAD LT 2025介绍(精简版cad2025)及中文版安装教程

Rose

Autodesk AutoCAD LT 2025 cad2025破解版 AutoCAD LT 2025介绍

Windows自定义后台进程并设置为开机启动

GousterCloud

windows 自定义 后台进程 开机启动

一文读懂MES和ERP的区别

万界星空科技

制造业 ERP mes 万界星空科技 生产管理软件

学习aop以及nginx

百度搜索:蓝易云

nginx Linux 运维 aop 云服务器

Disk Drill for mac专业直装版 苹果电脑数据恢复工具下载

Rose

Disk Drill下载 Disk Drill mac 数据恢复mac版

topaz gigapixel ai怎么安装?Topaz Gigapixel AI激活安装详细教程

Rose

topaz gigapixel ai破解版 无损放大图像 Topaz Gigapixel AI 安装

新体验、高效能,星河零代码产线加速带动产业新质生产力

飞桨PaddlePaddle

百度 BAIDU 百度飞桨 产品更新 PaddleX

探秘Kubernetes:在本地环境中玩转容器技术

SEAL安全

Kubernetes 容器 云原生 本地环境

【论文速读】| 通过间接提示注入危害现实世界中的LLM集成应用

云起无垠

选择KV数据库最重要的是什么?

YG科技

电源噪声的起因及危害

智趣匠

噪声 电源

什么是Ubuntu LTS?与常规版本的区别

百度搜索:蓝易云

云计算 Linux ubuntu 运维 云服务器

2024多云管理平台CMP排名看这里!

行云管家

云计算 云服务 多云管理 云管

标准库unsafe:带你突破golang中的类型限制

华为云开发者联盟

Go golang 开发 华为云 华为云开发者联盟

就业寒冬,我是如何拿到5个offer的(附面试题)

霍格沃兹测试开发学社

解析 WebSocket 与 HTTP 协议的关键区别

Apifox

编程 程序员 网络协议 HTTP websocket

hal库中串口常用函数介绍

百度搜索:蓝易云

云计算 Linux 运维 云服务器 HAL

Hazel for Mac自动化清理 含Hazel许可证

Rose

Hazel for Mac Hazel许可证 Hazel for Mac破解版 自动化文件整理

水杉3D建模工具:Metasequoia破解版 含永久注册码

Rose

水杉3D建模 Metasequoia 4 破解版 Metasequoia 4注册码

3D数字绘画和雕刻软件:Mudbox 2025 新功能介绍及安装教程

Rose

Mudbox 2025下载 Mudbox 2025新功能 Mudbox 2025安装教程 3D数字雕刻

Maya 2025下载 玛雅maya2025新功能介绍

Rose

Maya 2025中文版 Maya 2025下载 三维动画软件 玛雅2025新功能 玛雅2025破解

招聘严峻期我最终拿到5个Offer的一些经验分享(附面试题)

测试人

面试 软件测试

GaussDB(for Redis)助力金智教育业务数字化,增效降本双赢

YG科技

cad设计绘图Autodesk AutoCAD 2025完整版中文破解工具

Rose

AutoCAD 2025 CAD2025

守护更多女性健康,华为云GeminiDB助力美柚完成数据库高效稳定迁移

YG科技

人工智能降噪:topaz photo ai 操作系统 topaz photo ai中文破解安装包

Rose

智能降噪 Topaz Photo AI系统要求 Topaz Photo AI破解版

实现以图搜货功能,淘宝API开发实战分享

tbapi

图片搜索接口 以图搜货接口 拍立淘接口

C#中使用IntPtr.Size属性来判断当前系统是32位还是64位

百度搜索:蓝易云

C# 云计算 Linux 运维 云服务器

Chatbot具体需要如何搭建

百度搜索:蓝易云

云计算 Linux 运维 chatbot 云服务器

Elmedia Video Player Pro 支持AirPlay的苹果mac视频播放器

Rose

媒体播放器 Mac软件 视频播放器 Elmedia Video Player Pro

【重磅干货】大模型时代,开发者云上成长指南

华为云开发者联盟

华为云 华为云GaussDB 华为云开发者联盟 华为云CodeArts 华为云盘古大模型

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