控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

C#应用MemoryStream提高File读取速度

作者:佚名 出处:互联网 2012年02月09日 阅读:

C#应用MemoryStream提高File读取速度

一、场景:

需要将有一定格式的File里的内容读取到已经定义的类中,譬如一个二进制文件里的内容读取到一个新的DataStructure里面。

1. File不是很大,一次将所有内容Load到内存中,不会占用太多Memory;

2. 二进制文件无法直接反序列化成一个Object,需要一个映射才能完成转换.

二、为什么不用FileStream:

首先,我们来看一下FileStream的代码以及原理:

FileStream fs = new FileStream(binaryFilePath, FileMode.Open, FileAccess.Read);

Encoding enc = Encoding.ASCII;
using (BinaryReader br = new BinaryReader(fs,enc))
{

//

}

BinaryReader 提供了ReadInt16,ReadChar,ReadDouble,……但是每次Position.Seek都会去定位流的指针,所以会耗费一些时间。

但是如果我们一次性的将所有内容都独到内存(Memory)中,然后操作Memory是不是更快呢?

三、MemoryStream实现方法

FileStream fs = new FileStream(binaryFilePath, FileMode.Open, FileAccess.Read);
//Read all bytes into an array from the specified file.
int nBytes = (int)fs.Length;//计算流的长度
byte[] byteArray = new byte[nBytes];//初始化用于MemoryStream的Buffer
int nBytesRead = fs.Read(byteArray, 0, nBytes);//将File里的内容一次性的全部读到byteArray中去
using (MemoryStream br = new MemoryStream(byteArray))//初始化MemoryStream,并将Buffer指向FileStream的读取结果数组
{
/your code

}

四、性能分析

分别用以上两种方法Load File:1,2,3,4,5,6,将其Load的时间记录下来:

File File Size(Mb) FileStream(ms) MemoryStream(ms) Performance Enhancement
1 0.5 921 392 2.35
2 7.1 4454 1466 3.04
3 14 7848 3366 2.33
4 28 16025 6242 2.57
5 44 21196 9268 2.26
6 73 27533 14503 1.90

 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统