C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

时间:2022-11-09 09:53:40

测试机:笔记本i7 8G 固态硬盘

由于采取读码写入txt方式, 读码频率挺高,文件名为日期格式,当前采用每次读码打开文件写入的方式, 为什么没用sb,因为怕断电情况的数据丢失.所以采取每条存入的方式.

今天想对代码进行优化,采取文件流一直打开,不用每次打开关闭的情况,对效率进行测试.

1:新建项目 writetxt

2:添加时钟事件,定时写txt.

3:加两个写入方式

4:分别计时.查看效率.

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

   static object obj = new object();
public static void WriteSvnLog(string result)
{
lock (obj)
{
Stopwatch sw1 = new Stopwatch();
sw1.Start();
string time = DateTime.Now.ToLongTimeString();
string path = Application.StartupPath + "\\upload\\";
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
path = path + "\\logSvn" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
if (!File.Exists(path))
File.Create(path).Close();
//FileStream fileStream = new FileStream(path, System.IO.FileMode.Append, System.IO.FileAccess.Write);
//System.IO.StreamWriter sw = new System.IO.StreamWriter(fileStream, Encoding.Default);
FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
sw.WriteLine(result + " " + time);
sw.Close();
sw.Dispose();
fs.Close();
fs.Dispose();
sw1.Stop();
Debug.WriteLine(" 用时ms:" + sw1.Elapsed.TotalMilliseconds);
}
}
结果:
用时ms:2.4102
用时ms:2.8373
用时ms:2.987
用时ms:2.8673
用时ms:3.0787
用时ms:3.4216
用时ms:2.558
用时ms:2.6216
用时ms:2.5094
用时ms:2.4726

打开文件大小216k

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

测试2:打开30M的文件测试时间:

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

用时ms:11.0885
用时ms:2.5825
用时ms:2.5461
用时ms:2.6026
用时ms:6.1945
用时ms:2.5809
用时ms:3.247
用时ms:5.4372
用时ms:2.4047
用时ms:2.5754
用时ms:2.5532
用时ms:2.4252
用时ms:3.2643
用时ms:2.3798
用时ms:2.5797
用时ms:2.6018
用时ms:3.1233
用时ms:5.5288
用时ms:2.9044
用时ms:2.0491
用时ms:2.7034
用时ms:5.2598
用时ms:2.2486

中间有大值出现.此时计算机未饱和状态,总体值变化不大.

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

继续观察,有波动.

换20ms

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

用时ms:2.3521
用时ms:3.0119
用时ms:2.5323
用时ms:3.2632
用时ms:2.5801
用时ms:2.4971
用时ms:2.7784
用时ms:3.0281
用时ms:2.351
用时ms:2.6322
用时ms:3.0763
用时ms:2.1234
用时ms:2.569
用时ms:2.4023
用时ms:2.6595

测试三,改程序,换intel双核3.0 4G内存,机械硬盘pc机测试 老机器

因为远程机没有vs环境,用时输出到txt中

1:先在本机测试

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

2:远程机:

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

哎呀,配置低机器竟然写入速度还快, 笔记本还是固态硬盘,难道win10的固态硬盘写的慢? 问群里大牛说法.具体也不去看究竟了主要在于测试

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

测试四:同时写20个txt.测试

这里边碰到局部变量回收的问题

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快定于局部变量的时钟,运行一次就结束了.定义在外边就可以一直运行. 上边的循环中每次循环执行一次timer 执行完之后,重新赋值,原先的失效.也矫正了以前理解上的误区
在以前list<类>,list.add()之后尽管对象名一样.list内还是跟分开,导致产生了误区,
在此我写了student类作为测试
第一次
C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

student 对象在button 外定义.全局变量

结果stulist 的值列表 是十个

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

放在button里边

.C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

结果每次循环,表里边还是一个值,说明每次new 分配了一个新的列表对象,原先的被释放掉了

如下图,

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

那继续 list 对象放在外边,不new  对象,结果 也是如此 ,充分说明,每次new 之后产生新的地址,分配新的堆存储空间

C#做一个写txt文件流的测试,为什么配置低的机器写入的还快