博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dotnet程序优化心得(一)
阅读量:7237 次
发布时间:2019-06-29

本文共 1269 字,大约阅读时间需要 4 分钟。

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

(1)写出测试程序

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

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

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

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

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

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

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

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

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2005/08/15/215214.html如需转载请自行联系原作者

xiaotie 集异璧实验室(GEBLAB)

你可能感兴趣的文章
智能家居趋势
查看>>
[Leetcode] Pow(x, n)
查看>>
关于Microsoft Speech SDK 中TTS的研究 [转]
查看>>
两个与后台有关的回调处理
查看>>
idhttp.post方式 调用datasnap rest 远程方法
查看>>
Gulp快速入门
查看>>
TClientDataSet的 fastscript封装
查看>>
有用的国外开源项目网址
查看>>
DataGridView 绑定DataTable方式编辑保存的bug?
查看>>
ComboBox 使用数据绑定时 Sorted 属性的bug
查看>>
BZOJ 3172 单词(ac自动机)
查看>>
具体数学第二版第四章习题(2)
查看>>
DotNetBar.7.0 Crack
查看>>
D3D中深度测试和Alpha混合的关系
查看>>
延时执行和取消延时执行
查看>>
关于线程安全
查看>>
使用Java自带的VisualVM监控远程主机JVM内存使用情况
查看>>
123——Appium Girls活动
查看>>
Linux系统CPU频率调整工具使用
查看>>
使用大于16TB的ext4文件系统
查看>>