C#读取大文件
有些时候需要读取文件,小文件的时候效率的影响可以忽略,但是当文件上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的时候效率要比不增加的时候快
C#读取大文件的更多相关文章
- PHP如何快速读取大文件
在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...
- java读取大文件
1 多线程 2 java内存映射读取大文件
- php使用file函数、fseek函数读取大文件效率分析
php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接 ...
- Java多线程读取大文件
前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋 ...
- PHP读取大文件的几种方法介绍
读取大文件一直是一个头痛的问题,我们像使用php开发读取小文件可以直接使用各种函数实现,但一到大文章就会发现常用的方法是无法正常使用或时间太长太卡了,下面我们就一起来看看关于php读取大文件问题解决办 ...
- Java 读取大文件方法
需求:实际开发中读取文本文件的需求还是很多,如读取两个系统之间FTP发送文件,读取后保存到数据库中或日志文件的数据库中保存等. 为了测试首先利用数据库SQL生成大数据文件. 规则是 编号|姓名|手机号 ...
- Java高效读取大文件
1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung (http://www.baeldung.com/) 上“Java——回归基础”系列教程的一部分. 2.在内存中读取 ...
- Python逐块读取大文件行数的代码 - 为程序员服务
Python逐块读取大文件行数的代码 - 为程序员服务 python数文件行数最简单的方法是使用enumerate方法,但是如果文件很大的话,这个方法就有点慢了,我们可以逐块的读取文件的内容,然后按块 ...
- Java高效读取大文件(转)
1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung(http://www.baeldung.com/) 上“Java——回归基础”系列教程的一部分. 2.在内存中读取 读 ...
- Python读取大文件的"坑“与内存占用检测
python读写文件的api都很简单,一不留神就容易踩"坑".笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码. 1. ...
随机推荐
- Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.2
3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.2 http://blog.csdn.net/sunbow0 ...
- 学习Android之第六个小程序新浪微博(二)(ListView和TabActivity)
效果图例如以下: 选项卡的使用: 1.继承TabActivity 2.声明TabHost变量,通过方法getTabHost()获取并赋值. (TabHost tabHost =getTabHost( ...
- c#中的多态 c#中的委托
C#中的多态性 相信大家都对面向对象的三个特征封装.继承.多态很熟悉,每个人都能说上一两句,但是大多数都仅仅是知道这些是什么,不知道CLR内部是如何实现的,所以本篇文章主要说说多态性 ...
- 中科燕园GIS外包---交通运输综合地理信息平台
集地图.服务.应用于一身交通运输综合性的GIS门户 交通运输综合地理信息平台,是集地图.服务.应用于一身交通运输综合性的GIS门户.无需复杂的设置和部署,就可以高速创建交互式地图和应用程序,并 ...
- iOS 相似淘宝商品详情查看翻页效果的实现
基本思路: 1.设置一个 UIScrollView 作为视图底层,而且设置分页为两页 2.然后在第一个分页上加入一个 UITableView 而且设置表格可以上提载入(上拉操作即为让视图滚动到下一页) ...
- 【前端JS】radio 可单选可点击取消选中
普通情况下 radio 单选框仅仅能实现多选一的效果,可是一旦选择当中一个后,这个单选框就不可点击取消其选中状态了.这样的功能在某些业务环境下并不适用.有时我们既须要单选框的多选一效果.也须要复选框的 ...
- docker compose环境搭建
概述 Docker Compose提供一个简单的基于YAML配置语言.用于描写叙述和组装多容器的分布式应用. 使用docker定义和执行复杂的应用.使用compose,能够在一个文件中,定义多容器的应 ...
- 常用的sql命令
1 mysql创建数据库 create database [database name]; 2 创建表 create table [table name]([first column name] [f ...
- 提升自身的iOS编程水平 (转载)
阅读博客 在现在这个碎片化阅读流行的年代,博客的风头早已被微博盖过.而我却坚持写作博客,并且大量地阅读同行的iOS开发博客.博客的文章长度通常在3000字左右,许多iOS开发知识都至少需要这样的篇幅才 ...
- react native 之 redux
第一章 认识redux 说的通俗且直白一点呢,就是redux提供了一个store,独立的一个内存区,然后放了一些state,你可以在任何component中访问到state,这些state要更改怎么 ...