当前位置:Gxlcms >
数据库问题 >
C# FileStream 读取大文件时ReadByte和Read的速度对比
C# FileStream 读取大文件时ReadByte和Read的速度对比
时间:2021-07-01 10:21:17
帮助过:5人阅读
Program {
static void Main(
string[] args) {
Stopwatch sw =
new Stopwatch();
sw.Start();
Test2();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
Console.WriteLine("=============");
Test1();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.ReadKey();
}
public static void Test1() {
using (FileStream fs =
new FileStream(
"2020-05-24.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
byte val =
0;
long total =
fs.Length;
int read =
0;
while (read <
total) {
val = (
byte)fs.ReadByte();
read++
;
}
}
}
public static void Test2() {
using (FileStream fs =
new FileStream(
"2020-05-24.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
byte[] buffer =
new byte[
1024 *
1024];
int b =
1;
while (b >
0) {
b = fs.Read(buffer,
0, buffer.Length);
}
}
}
}
第一次,先执行Test1函数执行ReadByte操作,再执行Test2执行Read,发现Read是ReadByte的近20倍
由于可能硬盘本身读取存在缓存机制,我又是连续读取2次,所以我调换了一下执行顺序
第二次,先Test2,再Test1,发现Read依然比ReadByte快,但是明显低于第一次测试的读取速度,猜测是硬盘读取的缓存机制导致的
最终得到结果,取他们都作为第一次读取的速度,发现,通过Read读取数据填充缓冲区明显比ReadByte一个一个的读取快很多,快了近10倍
而且硬盘读取确实有缓存机制,后读取明显比先读取快很多
ReadByte
C# FileStream 读取大文件时ReadByte和Read的速度对比
标签:class 顺序 png ogr info ++ byte ISE 操作