• dotnet程序优化心得(一)


    近一段时间测试过几个程序,有一些心得。具体步骤如下:

    (1)写出测试程序
    (2)测试原程序,记录运行时间,作为优化的基础。要在Release下测试。
    (3)检查算法,是不是最有效的算法。尤其是现在内存便宜,看有没有能够用空间换取时间的方法
    (4)用Reflector查看类库,看你使用的方法是不是最有效率的方法
    (5)对于运行次数多,性能关键的地方,不要直接调用类库。类库是为通用目的设计的,用Reflector可以发现,针对特殊的问题,内库里面有很多冗余代码

    测试程序是很关键的,dotnet下用DateTime.Now.Ticks能够得到精确的时间,单位是10^-7s。

    我爱用下面这种结构的测试代码:

     1    static void Main(string[] args)
     2    {
     3long _start,_end,_loops; //DateTime.Now.Ticks是long int
     4        _loops=100000;    //重复次数
     5        _start=DateTime.Now.Ticks;
     6
     7        for (int i=0;i<_loops;i++)
     8        {
     9            原方法;
    10        }
    11        _end=DateTime.Now.Ticks;
    12
    13        Console.WriteLine("{0}次调用原方法共花费时间{1}ms",_loops,(_end-_start)/10000);
    14
    15        _start=DateTime.Now.Ticks;
    16
    17        for (int i=0;i<_loops;i++)
    18        {
    19            优化后方法;
    20        }
    21        _end=DateTime.Now.Ticks;
    22
    23        Console.WriteLine("{0}次调用优化后方法共花费时间{1}ms",_loops,(_end-_start)/10000);
    24    }

    一定要在一次运行中同时测试原方法和优化后方法,这样得到的测试结果才有比较意义。(如果你的方法非常耗用CPU,用带超线程的计算机,或者把测试进程设置成实时进程,这样得到的结果更精确。)

    windows下时间精度应该是0.001-0.01ms,运行时间在0.01ms以下的结果不可靠。.net下时间精度应该更低一点。我怀疑只有0.1ms,但没有认真测试过。

    不想让别的进程干扰,就把测试进程设置成实时进程。半年前测试一个程序,性能只到了40-60,查看进程发现cpu时间主要是GUI占用了,测试进程只占用了20%。动动鼠标,程序性能会上串下跳的。把进程优先级调到最高,测试进程cpu占用稳定在93-97%。设置为实时进程,cpu占用稳定在96-97%,这样测试的结果才有效。

    下面以实际例子具体解释相关技巧。

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    HDU 2121 Ice_cream’s world II 不定根最小树形图
    POJ 3164 Command Network 最小树形图
    POJ 3723 Conscription 最小生成树
    UVA 1175 Ladies' Choice 稳定婚姻问题
    BZOJ 2753 [SCOI2012] 滑雪和时间胶囊 最小生成树
    BZOJ 1854: [Scoi2010]游戏 无向图判环
    HDU 3974 Assign the task 暴力/线段树
    Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路
    uoj 67 新年的毒瘤 割点
    蓝桥
  • 原文地址:https://www.cnblogs.com/Athrun/p/823363.html
Copyright © 2020-2023  润新知