架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1435|回复: 1

[资料] .NET/C# 之 Stream 读取磁盘文件内存优化

[复制链接]
发表于 2023-6-9 22:29:50 | 显示全部楼层 |阅读模式
需求:之前写过通过文件的头部校验文件格式是否正确,其实只需要读取文件的前几个字节就可以判断,不需要读取整个文件,本文使用 Stream 读取磁盘文件的前几个字节,优化内存空间,其实也就是按需读取

回顾:

文件大小Bytes到KB,MB,GB,TB单位智能转换
https://www.itsvse.com/thread-3062-1-1.html

.NET/C# 根据文件头部 byte[] 校验上传文件
https://www.itsvse.com/thread-10594-1-1.html
使用 File.ReadAllBytes 读取整个应用程序文件,可以看到程序占用非常大。如下图:

QQ截图20230609210446.jpg

其实只需要读取 2 个字节就可以判断该文件是否是应用程序了,使用 StreamReader 读取文件的前 2 个字节,如下图:

https://file-extension.net/seeker/file_extension_exe

QQ截图20230609210806.jpg

可以看到从原来内存占用 287.11 MB 降低到了 20.55 MB(在不读取文件的情况下,程序启动后默认内存就占用:20.02 MB),可以看到节省了大量没必要的内存开支。代码如下:

大家都知道无法使用记事本打开一个比较大的 txt 文件,打开程序就会假死,如果我们只想看文本的开头内容,可以使用 more 命令进行查看,如何使用 .NET/C# 代码读取文本内容呢?

使用两种方式进行读取,代码如下:

QQ截图20230609222640.jpg

由于这个文件是纯文本内容,如果是 UTF-8 或者其它编码格式,文件的前几个字节需要忽略,也就是需要设置流的位置(例如:Position = 2)

(完)





上一篇:[MSSQL]SQL SERVER 有序 GUID 和无序 GUID 作为主键聚集索引测试
下一篇:感悟:从博客园看到一位博主写的签名
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-7-1 21:13:08 | 显示全部楼层
读取整个 txt 文件

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-6-2 05:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表