有些时候需要读取文件,小文件的时候效率的影响可以忽略,但是当文件上M,上G的时候,这个时候,效率问题就非常重要了,下面将对一个3G的文件,用C#的方式读取,对比效率的影响。

1. FileStream对象表示在磁盘或网络路径上指向文件的流,操作的是字节和字节数组,可以用于任何数据文件,而不仅仅是文本文件,也可以读取类似图像和声音的文件
2. BufferedStream类主要用来处理流数据的,减少某些流直接操作存储设备的时间,提高读写效率,也可以读取字节,当读取文件的时候,用字节读取有可能会把字符分开,最后转换而成的字符可能就有问题。
3. StreamReader,StreamWriter 类操作的是字符数据,一般用于读写文件

#FileMode
1. Create:创建新文件;如果存在这样的文件,将重写
2. CreateNew:创建新文件,但是如果已经存在此文件,则抛出异常
3. Open:打开现有的文件,但是不存在所指定的文件,则抛出异常
4. OpenOrCreate:如果文件存在,则规定打开文件,否则就创建新文件
5. Truncate:打开现有文件,清除其内容
6. Append:如果文件存在,就打开文件,将文件位置移动到文件的末尾,否则创建一个新文件。

以下代码是在.net core环境下运行的

Stopwatch watch = new Stopwatch();
watch.Restart();
using (StreamWriter newFile = new StreamWriter(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\big4.txt"))
using (StreamReader reader = new StreamReader(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\test.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
newFile.WriteLine(line);
}
}
watch.Stop();
Console.WriteLine($"StreamReader StreamWriter 程序运行花费的时间:{(double)watch.ElapsedMilliseconds / 1000:0.000} secs"); watch.Restart();
int length = ;
byte[] array = new byte[length];
int bytesRead = ;
using (FileStream fileStream = new FileStream(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\test.txt", FileMode.Open))
using (FileStream newFile = new FileStream(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\test5.txt", FileMode.Create))
using (BufferedStream bufferedStream = new BufferedStream(fileStream))
{
while ((bytesRead = bufferedStream.Read(array, , length)) > )
{
if (bytesRead == length)
newFile.Write(array);
else
newFile.Write(array, , bytesRead);
}
}
watch.Stop();
Console.WriteLine($"BufferedStream FileStream 程序运行花费的时间:{(double)watch.ElapsedMilliseconds / 1000:0.000} secs"); watch.Restart();
using (FileStream fileStream = new FileStream(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\test.txt", FileMode.Open))
using (StreamWriter newFile = new StreamWriter(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\test6.txt"))
using (BufferedStream bufferedStream = new BufferedStream(fileStream))
using (StreamReader reader = new StreamReader(fileStream))
{
string line;
while ((line = reader.ReadLine()) != null)
{
newFile.WriteLine(line);
}
}
watch.Stop();
Console.WriteLine($"StreamReader StreamWriter(结合BufferedStream) 程序运行花费的时间:{(double)watch.ElapsedMilliseconds / 1000:0.000} secs");

没有读写文件的计算机性能

读写文件的时候计算机性能

当读写文件的时候,CPU和磁盘使用率提高,如果服务器经常读写文件的话,需要好的CPU和硬盘

3G的文件读写运行效率对比

小文件运行效率对比

对比以上结果,读取字节效率最高,增加BufferedStream的时候效率要比不增加的时候快

最新文章

  1. 学习3ds max插件开发过程中的一些小结
  2. Android 线程池(转)
  3. 登录验证码编写(jsp+servlet+dao)
  4. 一步一步来做WebQQ机器人-(四)(获取好友列表和群列表)
  5. python基础——字符串和编码
  6. C++ Primer Pluse_6_课后题
  7. maven PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path
  8. 我是一只it小小鸟阅读笔记
  9. 利用vim阅读源代码一个好用的工具
  10. SSH电力项目
  11. Jquery全选与反选checkbox(代码示例)
  12. [javascript]在浏览器端应用cookie记住用户名
  13. C语言实现通讯录
  14. 自己写CPU第五级(5)——测试逻辑、实现移动和空指令
  15. VS2013提示error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead.
  16. 一、iOS中的事件可以分为3大类型
  17. Frame
  18. Python 小试牛刀,Django详细解读,让你更快的掌握它!!!
  19. web中cookie的使用
  20. node.js 模块的分类

热门文章

  1. C#语言 语句
  2. php闭包实例
  3. Erlang进程堆垃圾回收机制
  4. Linux性能查看与分析--命令行工具介绍
  5. Sharepoint2013 列表的NewForm 页面加入一个 保存新建 button
  6. 我遇到的错误curl: (7) Failed to connect to 127.0.0.1 port 1086: Connection refused
  7. __sizeof__()
  8. js中字符串函数indexOf与search的区别
  9. mysql优化----explain的列分析
  10. 总结 <stdlib.h>头文件 在算法中可能会用到的一些函数