耗时计算。。。

wxmaple 2009-05-07 10:35:58
我有个数据库检索方法,我想算出这个方法执行所用的时间,而且想精确到毫秒。。。是不是在执行之前,取得一个系统时间,执行后取得一个系统时间,然后相减呢?具体怎么做啊?我用的C#啊
...全文
246 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxmaple 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 vrhero 的回复:]
引用 11 楼 wxmaple 的回复:
还有毫秒小数哦,好像很先进的样子,不知道是不是精确的……

这和系统有关系...

Stopwatch 在基础计时器机制中对计时器的刻度进行计数,从而测量运行时间。如果安装的硬件和操作系统支持高分辨率性能的计数器,则 Stopwatch 类将使用该计数器来测量运行时间;否则,Stopwatch 类将使用系统计数器来测量运行时间。使用 Frequency 和 IsHighResolution 字段可以确定实现 Stopwatch 计时的精度和…
[/Quote]
呵呵,先膜拜下……我这东西说穿了也就闹个眼子,在页面显示个 搜索 用时,也学学百度、GOOGLE搞的专业店,如果搞不出来,我都恨不得用随机函数了。。呵呵
vrhero 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wxmaple 的回复:]
还有毫秒小数哦,好像很先进的样子,不知道是不是精确的……
[/Quote]
这和系统有关系...

Stopwatch 在基础计时器机制中对计时器的刻度进行计数,从而测量运行时间。如果安装的硬件和操作系统支持高分辨率性能的计数器,则 Stopwatch 类将使用该计数器来测量运行时间;否则,Stopwatch 类将使用系统计数器来测量运行时间。使用 Frequency 和 IsHighResolution 字段可以确定实现 Stopwatch 计时的精度和分辨率。

在多处理器计算机上,线程在哪个处理器上运行无关紧要。但是,由于 BIOS 或硬件抽象层 (HAL) 中的 bug,在不同的处理器上可能会得出不同的计时结果。若要为线程指定处理器关联,请使用 ProcessThread..::.ProcessorAffinity 方法。

对于高精度计时Stopwatch实际上是调用系统API QueryPerformanceFrequency 和 QueryPerformanceCounter 来计算的...
zealot1021 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 vrhero 的回复:]
引用 7 楼 zealot1021 的回复:
用Ticks也行,此属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来已经过的时间的以 100 毫微秒为间隔的间隔数。

(begin.Ticks-end.Ticks)*100就是消耗的毫微秒数
1毫秒=1000毫微秒

两个错误...

1.1毫秒=1000000毫微秒...

2.显然是不可能达到100毫微秒的精度的...

Ticks是以100毫微秒为单位,不是精度100毫微秒...这是完全不同的概念...
[/Quote]
受教~
wxmaple 2009-05-07
  • 打赏
  • 举报
回复
还有毫秒小数哦,好像很先进的样子,不知道是不是精确的……
wxmaple 2009-05-07
  • 打赏
  • 举报
回复
我是这样做的……

System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
>>>DB操作
stopwatch.Stop();

//取出总计耗时
string sTime = stopwatch.Elapsed.TotalMilliseconds.ToString();
vrhero 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zealot1021 的回复:]
用Ticks也行,此属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来已经过的时间的以 100 毫微秒为间隔的间隔数。

(begin.Ticks-end.Ticks)*100就是消耗的毫微秒数
1毫秒=1000毫微秒
[/Quote]
两个错误...

1.1毫秒=1000000毫微秒...

2.显然是不可能达到100毫微秒的精度的...

Ticks是以100毫微秒为单位,不是精度100毫微秒...这是完全不同的概念...
zealot1021 2009-05-07
  • 打赏
  • 举报
回复
应该是
1 毫秒 = 10^-3 秒,
1 微秒 = 10^-6 秒,
1 毫微秒 = 10^-9 秒,
100 毫微秒 = 10^-7 秒。
看错了
zealot1021 2009-05-07
  • 打赏
  • 举报
回复
用Ticks也行,此属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来已经过的时间的以 100 毫微秒为间隔的间隔数。

(begin.Ticks-end.Ticks)*100就是消耗的毫微秒数
1毫秒=1000毫微秒
vrhero 2009-05-07
  • 打赏
  • 举报
回复
System.Diagnostics.Stopwatch 提供一组方法和属性,可用于准确地测量运行时间。.NET 2.0以上支持...

系统时钟是不可能达到毫秒级精度的,XP以上系统大约是15毫秒左右...
zealot1021 2009-05-07
  • 打赏
  • 举报
回复
dateTime begin=dateTime.Now;
执行计算
dateTime end=dateTime.Now;
dateTime need=new dateTime(begin.Year-end.Year,begin.Month-end.Month,begin.Day-end.Day,
begin.Hour-end.Hour,begin.Minute-end.Minute,begin.Second-end.Second,begin.Millisecond-end.Millisecond)//所消耗时间
1秒=1000毫秒,自己去算~
deyter 2009-05-07
  • 打赏
  • 举报
回复
DateTime.Now.Ticks,这个够精确了
wxmaple 2009-05-07
  • 打赏
  • 举报
回复
呵呵,谢谢楼上的,不过这些属性我都知道啊。。。我再厚颜问一下,如果我只想要毫秒呢,怎么减啊。
truediego 2009-05-07
  • 打赏
  • 举报
回复
DateTime beginTime = DateTime.Now;
>>>DB操作
DateTime endTime = DateTime.Now;
TimeSpan ts = endTime.Subtract(beginTime);
Console.Writeln(ts.Days * 24 + ts.Hours + ":" + ts.Minutes + ":" + ts.Seconds + "." + ts.Milliseconds);
zealot1021 2009-05-07
  • 打赏
  • 举报
回复
DateTime time = DateTime.Now;
time.Year;//年
time.Month;//月
time.Day;//日
time.Hour;//小时
time.Minute;//分钟
time.Second;//秒
time.Millisecond;//毫秒
这些属性都是int型,可以直接相减

111,126

社区成员

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

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

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