***** 100分求助 函数耗费时间的问题 *****

sarcophile 2004-08-28 01:05:15
如何才能 精确地 得到一个函数或一个循环等 运行所耗费的时间?
如果在函数调用前和调用后分别读系统时间,然后相减,这样得到的结果很不精确,有什么更好的办法?
...全文
285 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqchen79 2004-09-03
  • 打赏
  • 举报
回复
1. Process.TotalProcessorTime 显示了进程占用CPU的时间总和,不包括进程Idle的时间。

2. 一般的做法是重复函数调用N次,然后取平均,降低误差。

3. 这样的工具有很多:Rational Quantify, Intel VTune Analyzer... 如果是.NET程序,可以用CLR Profiler.
csq0516 2004-09-03
  • 打赏
  • 举报
回复
up
sarcophile 2004-09-03
  • 打赏
  • 举报
回复
danlog(龙帝) 的主意本是不错的,可有个问题:要跟踪一个 new DataSet()怕要一天


我是想有这么个工具就好了,比如类库或应用软件什么的
yingshis 2004-09-01
  • 打赏
  • 举报
回复
如果要求精确到ms级的话估计只能考虑用API
Declare Function timeGetTime Lib "winmm.dll" () As Long
上面的函数可按ms取得当前系统已运行的时间,该值返回一个长整形数字。
sarcophile 2004-09-01
  • 打赏
  • 举报
回复
单片机、dsp 等的仿真工具,包括一些很低端的,很多都可以实时统计或静态模拟出每一个函数使用的 cpu 时间

.net 对进程也可以做这样的统计

所以我想,有没有什么工具,对线程和函数也可以做这样的统计?
微启子 2004-09-01
  • 打赏
  • 举报
回复
这样最精确!
微启子 2004-09-01
  • 打赏
  • 举报
回复
全部转化成 底层语言 (汇编)
每句汇编的执行,cpu 时间都是知道了!
MOV 1个
Add 2个
根据cpu 时钟计算运算时间
dxphero 2004-09-01
  • 打赏
  • 举报
回复
你通过三个lable
第一个显示开始的时间
第二个显示结束的时间
第三个显示相差的时间
你在一个按钮下实现
程序写的时候也是这个顺序,你试一试
khpcg 2004-09-01
  • 打赏
  • 举报
回复
可否让她执行1000遍,求系统时间差再除
lexchou 2004-08-28
  • 打赏
  • 举报
回复
将你的线程的权限设为实时,来独占CPU

如楼上所说,.net弄这个要求极端精确是绝对不可能的。如果能像Delphi、C/C++内嵌汇编rdtsc指令,那才能绝对精确
ajqc 2004-08-28
  • 打赏
  • 举报
回复
极端精确是绝对不可能也无实际意义的,毕竟真实运行时不可能只有自己一个程序在运行,如果非要极端精确的话,试试按上面的方法去做,外加把你的程序的运行级别设到实时
sarcophile 2004-08-28
  • 打赏
  • 举报
回复
看了楼上的文章,很棒,非常感谢。

可是我还想解决前面提到的问题,就是有没有办法减去其他线程所消耗的时间?
比如楼上给出的例子是建立一个 DataTable 所花的时间,但如果此时有同等优先级的线程抢先,其中很可能有60%的时间是别的线程占用的,怎样把这部分时间减去?
曲滨_銘龘鶽 2004-08-28
  • 打赏
  • 举报
回复
如果要更精确可以看看我的文章
.Net 实现纳秒级别计算

http://blog.csdn.net/flashelf/archive/2004/06/23/24336.aspx
sarcophile 2004-08-28
  • 打赏
  • 举报
回复
============================================

一个问题是:如果该函数执行中,被其它线程打断,能不能不计其它线程运行的时间,只计本函数自己运行的时间?

===========================================
bomb_boy 2004-08-28
  • 打赏
  • 举报
回复
api系统时间已经比较好了
[DllImport("winmm.dll")]
static extern int timeGetTime();
sarcophile 2004-08-28
  • 打赏
  • 举报
回复




Any more ?
rbmnet 2004-08-28
  • 打赏
  • 举报
回复
很久以前见过,忘了具体在哪儿了
lexchou 2004-08-28
  • 打赏
  • 举报
回复
[DllImport("winmm.dll")]
static extern int timeGetTime();

这个的开销比楼上几个方案要小。
sarcophile 2004-08-28
  • 打赏
  • 举报
回复
zzcwhq(zzcwhq) 和 haiwangstar(南河三(天狼星上有没有普及C#))

我都说了这种效果不理想,想看看有没有更好的方法?
haiwangstar 2004-08-28
  • 打赏
  • 举报
回复
执行函数前
long before System.DateTime.Ticks;
...
执行函数后

long times = DateTime.Ticks - before;
加载更多回复(2)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧