当前位置: 首页 > news >正文

C#流Stream与IO详解(4)——如何更快的读写文件

【前言】

在我们追求更快读写速度时,通常都是为了读写二进制文件,而不是文本文件,所以这里只说FileStream、BinaryReader、BinaryWriter的使用。

从前文的源码解读中能看到使用BinaryReader和BinaryWriter进行IO读写时本质还是调用了FileStream的接口,所以我们这里只说FileStream的使用即可。

此外,我们这里说的更快读写是指在同一个线程中的读写,而不是使用多线程读写。

【打开关闭文件】

打开和关闭文件是非常耗时的操作,有如下优化方式:

1.如果只需要读写一个文件,但需要在多个地方读写文件,应该持有同一个FileStream,而不是每次new一个FileStream

2.如果要读写很多文件,应该先创建一系列的FileStream,而不是每次需要的时候再创建FileStream。

【读写文件】

 FileStream自己有个Buffer,读写数据时要避免使用这个buffer,因为会多一次copy,这个buffer的大小默认为4kb(可以在new的时候自定义大小),自己指定的Array的大小要大于或等于4kb。因此,优化措施如下:

1.每次读取文件的大小至少为4kb,即使你实际并不需要4kb的大小,然后从自己指定的Array中获取想要的数据。即使文件大小不足4kb,自己指定的Buffer的大小也要为4kb。

2.写入数据时凑足4kb再写入,如果数据不足4kb,可以补充些无用的数据到4kb,或者将buffersize设置的小点

3.如果需要同时读写,不要交叉读写。

【寻找位置】

从前文的源码可以知道,在寻找位置时,可能存在Copy的步骤,为了加快寻找位置,同样需要在读写数据时要避免使用FileStream的buffer

相关文章:

  • IP风险查询:抵御DDoS攻击和CC攻击的关键一步
  • 05预测识别-依托YOLO V8进行训练模型的识别——对视频中的图片进行识别
  • 前端框架vBean admin
  • Eclipse工具使用技巧
  • Golang编写自定义IP限流中间件
  • Ubuntu安装Android Studio
  • C语言基础知识点(八)联合体和大小端模式
  • 机器学习中分类问题的初步
  • MongoDB——将时间戳转换为日期
  • 学习Nano编辑器:入门指南、安装步骤、基本操作和高级功能
  • 【AWS】AI 代码生成器—Amazon CodeWhisperer初体验 | 开启开挂编程之旅
  • C/C++/Python图像处理算法实战【3】彩色图像灰度化和二值化处理
  • CTF —— 网络安全大赛(这不比王者好玩吗?)
  • 【深度学习】卷积神经网络(LeNet)【文章重新修改中】
  • 2023年腾讯云轻量服务器测评:16核 32G 28M 配置CPU测试
  • electron build 打包时,背景图片失败,background-image: url 被转换成app:///img/
  • 使用JavaScript实现图片的自动轮播
  • OpenCV之九宫格图像
  • 软件工程开发模式:从传统到现代的演进
  • opencv图像像素类型转换与归一化
  • 电影“名场面”被制成表情包在网站上传播,网站运营者被判赔5500元
  • 澳大利亚大选提前投票开始
  • 浙江一季度GDP为22300亿元,同比增长6.0%
  • 俄乌互指对方未遵守复活节临时停火提议
  • 云南昆明市副市长戴惠明已任市委常委、秘书长
  • 观察|如何推动再保险交易规模上量增加话语权,行业在临港新片区共倡议