zoukankan      html  css  js  c++  java
  • C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

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

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

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

    1:新建项目 writetxt

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

    3:加两个写入方式

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

       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

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

    用时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

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

    继续观察,有波动.

    换20ms

    用时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:先在本机测试

     2:远程机:

     

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

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

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

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

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

    结果stulist 的值列表 是十个

    放在button里边

    .

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

    如下图,

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

  • 相关阅读:
    数列分段divide
    精度计算(保留几位小数)
    洛谷P1119灾后重建
    暴雨rain
    石子游戏stone
    化学家chemist
    【ybtoj】【质数和约数】合并集合
    【ybtoj】【质数和约数】质数距离
    【ybtoj】【质数和约数】不定方程
    【再见OI】9.23模拟总结
  • 原文地址:https://www.cnblogs.com/zuochanzi/p/6784892.html
Copyright © 2011-2022 走看看