DateTime.Now.Ticks到底精准吗?熟悉的朋友进来帮下忙啊

rbbcnm 2015-06-11 06:17:17
    static void Main()
{ Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
long c=stopWatch.ElapsedMilliseconds;
Thread.Sleep(100);
long d=stopWatch.ElapsedMilliseconds;
Console.WriteLine(d-c);

long i=DateTime.Now.Ticks;
Thread.Sleep(100);
i-=DateTime.Now.Ticks;
Console.WriteLine(i/10000);
}


输出的结果是:
100
-118

为什么DateTime.Now.Ticks相差那么大?不是100纳秒吗?
...全文
1060 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengxichou 2019-01-18
  • 打赏
  • 举报
回复
后排瞻仰一下楼主...
fd34gs3yf 2019-01-18
  • 打赏
  • 举报
回复
要明白一个道理:别人取得的知识都是有成本的,别人的时间也是有成本的。 别人愿意花时间回复你,就是给你面子了
fd34gs3yf 2019-01-18
  • 打赏
  • 举报
回复
这年头有人回复你,你就烧高香了。 要么掏钱让别人解决。 菜逼的事情还真多呢,别人没义务回答你,就是踩你一下,也是帮你刷新帖子了,你要感谢别人,没感觉到现在无论什么论坛,基本上都没什么回复了吗????
橘子皮... 2019-01-18
  • 打赏
  • 举报
回复
https://download.csdn.net/download/hyp429/963629 就是这个,以前在vb6里用过他,老外做的,实测能精确到1-2ms
橘子皮... 2019-01-18
  • 打赏
  • 举报
回复
哦,对了,一般系统计算时间的命令误差是系统误差也就是15ms,小于ms的精度需要特殊的指令,一般都是用汇编编写的,可以百度高性能计时器,我用过1个可以误差到2ms
橘子皮... 2019-01-18
  • 打赏
  • 举报
回复

Public Function GetTickCount() As Integer
        Dim n As Integer
        n = Environment.TickCount
        If n >= 0 Then
            Return n
        Else
            Return n And Int32.MaxValue  '0,1,2,3,-3,-2,0 -> 0,1,2,3,0,1,2,3
        End If
    End Function
我是这么写的
by_封爱 版主 2017-07-07
  • 打赏
  • 举报
回复
引用 36 楼 qq_17610623 的回复:
愚蠢和笨的区别是,愚蠢的人不知道自己愚蠢。时隔两年我都想把你从坟里刨出来骂一顿。
是啊 2年前的帖子都能挖出来 我觉得是 愚蠢&&笨 同时存在.....
师叔祖²º¹⁹ 2017-07-07
  • 打赏
  • 举报
回复
愚蠢和笨的区别是,愚蠢的人不知道自己愚蠢。时隔两年我都想把你从坟里刨出来骂一顿。
拜一刀 2015-11-11
  • 打赏
  • 举报
回复
年轻 希望你有朝一日能看明白大家在说啥
天线xxxx 2015-11-11
  • 打赏
  • 举报
回复
test 一下
t357329481 2015-11-11
  • 打赏
  • 举报
回复
引用 6 楼 rbbcnm 的回复:
[quote=引用 5 楼 sp1234 的回复:] 如果你在教高级的电脑、而又什么都不运行(CPU占用几乎为1%、2%)的情况下测试这么简单的程序,那么你自然得到貌似很准确的Sleep结果。 但是如果你运行另外两三个占用内存上百兆、占CPU15%以上的进程,或者你的程序是一个复杂多任务程序,并且你的进程中的线程也不是非常高优先级的,再来看Sleep(并且不要搞100这么大、这么整的数字),就经常会出现误差了。
你是在混分吗?老是在教别人逃避问题,你解决不了也就算了,还装出一副高手的样子,这几天来csdn碰到多个你这种人了 我用多线程时,他洋洋洒洒一大篇,讽刺我在用多线程,还说让我用异步啥的,到最后还是用到了多线程,其实根本不需要知道异步是什么东西,我在网页的在线手册里也没有列出什么异步,但我那个帖子后来解决了问题,每个线程间相隔固定的时间 就是异步了,后来有个2级的网友告诉我autoresetevent 把问题轻松解决了,线程之间切换耗时0毫秒,你当时也在那个帖子,也是说一大堆打击人的话,其实你也不知道autoresetevent这个东西,也是别人发出来了以后才去搜的吧?不然一句话就解决的问题,根本不会说那么多没用的了 至于这个问题,我刚才特意下了个鲁大师,温度压力测试,并把100ms改为3ms,结果还是这样的结果 明明自己不懂也就算了,还非要装出一副专家的样子,实践证明 你懂个屁的系统?或许你看了一些书,那也是书呆子,没有自己理解 另外,我从这个月开始学的c#,像什么变量之类的都没细看,用到了再去翻在线手册,以前就看过一些php代码,但是没具体做过东西,我觉得你们这些等级高的人压根和高手不搭边,想想也是,真是高手就不会那么多无用的话了,想让别人尊重你,你得有真材实料,而不是说一些空话,可笑的是 上个帖子里的那个人在不停地教我做人的道理,你跟他完全一个类型的,没真材实料 爱摆臭架子 [/quote] 垃圾就是垃圾 社会底层的人 学了点C#毛皮就洋洋得意 武断的揣测别人的行为 要知道你自己是什么样的货色,你看别人也以为别人像自己一样, 简单的说 就是狗改不了吃屎 小人看谁都是小人! sp1234这人我知道 在社区热心的帮助过很多的人,你有啥资格龇牙,我就是一直潜水的人 今天看到 实在是忍不了 一个人可以愚蠢 但是不能不尊重知识。 至于你的愚蠢问题 Stopwatch 和 DateTime.Now.Ticks 他们的实现原理 有本质上的不同 但是有什么样的不同 哈哈 我还真不告诉你 我不是你爹 没责任要教你聪明!
  • 打赏
  • 举报
回复
系统API的Sleep函数说的很清楚,并且是放弃属于这个线程的CPU时间,并且是不精确的 很明显与CPU当前执行的多任务(线程)调度有关,CPU时间几乎不可能全部分配给你的线程(哪怕你提高线程优先级多运行一会儿也是一样) 其实这个问题之前写测试例子的时候就发现了,后来去查了下源代码,根本的区别就是StopWatch用的是性能计数器 先看下StopWatch的静态构造 static Stopwatch() { if (!SafeNativeMethods.QueryPerformanceFrequency(out Frequency)) { IsHighResolution = false; Frequency = 0x989680L; tickFrequency = 1.0; } else { IsHighResolution = true; tickFrequency = 10000000.0; tickFrequency /= (double) Frequency; } } Start() 的时候通过计数器获得实际的Ticks if (IsHighResolution) { long num = 0L; SafeNativeMethods.QueryPerformanceCounter(out num); return num; } return DateTime.UtcNow.Ticks; 好了,你可以结贴了
  • 打赏
  • 举报
回复
crystal_lz 2015-11-11
  • 打赏
  • 举报
回复
我居然一楼一楼的看完了。。。。。。 反正我是感觉那个东西不怎么准的 不过毫秒级别的 感觉还是可信的 精度在高一点 就感觉不可靠了 你可以试试 windows 的 那两个高精度计时的函数 http://blog.csdn.net/cloudhsu/article/details/5773043
  • 打赏
  • 举报
回复
我服了。 才学几个月c#的在这狂喷。。。 还有既然你学c# 不知道有msdn这个东西吗? 你觉得别人说的不精准,你却微软官网教科书似的网站去找答案啊!
於黾 2015-06-12
  • 打赏
  • 举报
回复
sp1234的回答,另很多新手诟病 认为他不正面回答问题,而是讲一大堆大道理,说教 问题是,正是因为新手的想法很多根本不切实际,所以需要给你恶补基础 好比有人要上吊,问什么绳子比较好 难道回答的人不应该劝人向善,而是真的就直接告诉他什么牌子的绳子最结实,不容易获救,就对了吗??
於黾 2015-06-12
  • 打赏
  • 举报
回复
跟鲁大师有个毛的关系 CPU温度跟多少毫秒有一毛钱关系??
skyandcode 2015-06-12
  • 打赏
  • 举报
回复
引用 6 楼 rbbcnm 的回复:
[quote=引用 5 楼 sp1234 的回复:] 如果你在教高级的电脑、而又什么都不运行(CPU占用几乎为1%、2%)的情况下测试这么简单的程序,那么你自然得到貌似很准确的Sleep结果。 但是如果你运行另外两三个占用内存上百兆、占CPU15%以上的进程,或者你的程序是一个复杂多任务程序,并且你的进程中的线程也不是非常高优先级的,再来看Sleep(并且不要搞100这么大、这么整的数字),就经常会出现误差了。
你是在混分吗?老是在教别人逃避问题,你解决不了也就算了,还装出一副高手的样子,这几天来csdn碰到多个你这种人了 我用多线程时,他洋洋洒洒一大篇,讽刺我在用多线程,还说让我用异步啥的,到最后还是用到了多线程,其实根本不需要知道异步是什么东西,我在网页的在线手册里也没有列出什么异步,但我那个帖子后来解决了问题,每个线程间相隔固定的时间 就是异步了,后来有个2级的网友告诉我autoresetevent 把问题轻松解决了,线程之间切换耗时0毫秒,你当时也在那个帖子,也是说一大堆打击人的话,其实你也不知道autoresetevent这个东西,也是别人发出来了以后才去搜的吧?不然一句话就解决的问题,根本不会说那么多没用的了 至于这个问题,我刚才特意下了个鲁大师,温度压力测试,并把100ms改为3ms,结果还是这样的结果 明明自己不懂也就算了,还非要装出一副专家的样子,实践证明 你懂个屁的系统?或许你看了一些书,那也是书呆子,没有自己理解 另外,我从这个月开始学的c#,像什么变量之类的都没细看,用到了再去翻在线手册,以前就看过一些php代码,但是没具体做过东西,我觉得你们这些等级高的人压根和高手不搭边,想想也是,真是高手就不会那么多无用的话了,想让别人尊重你,你得有真材实料,而不是说一些空话,可笑的是 上个帖子里的那个人在不停地教我做人的道理,你跟他完全一个类型的,没真材实料 爱摆臭架子 [/quote] 他不是很好回答你问题了吗,你读不懂sp1234的话,证明你水平不够。 在csdn能像他这样回帖的几乎没有,人家写那么多,赚你点分有意思吗?
gengchenhui 2015-06-12
  • 打赏
  • 举报
回复
引用 6 楼 rbbcnm 的回复:
[quote=引用 5 楼 sp1234 的回复:] 如果你在教高级的电脑、而又什么都不运行(CPU占用几乎为1%、2%)的情况下测试这么简单的程序,那么你自然得到貌似很准确的Sleep结果。 但是如果你运行另外两三个占用内存上百兆、占CPU15%以上的进程,或者你的程序是一个复杂多任务程序,并且你的进程中的线程也不是非常高优先级的,再来看Sleep(并且不要搞100这么大、这么整的数字),就经常会出现误差了。
你是在混分吗?老是在教别人逃避问题,你解决不了也就算了,还装出一副高手的样子,这几天来csdn碰到多个你这种人了 我用多线程时,他洋洋洒洒一大篇,讽刺我在用多线程,还说让我用异步啥的,到最后还是用到了多线程,其实根本不需要知道异步是什么东西,我在网页的在线手册里也没有列出什么异步,但我那个帖子后来解决了问题,每个线程间相隔固定的时间 就是异步了,后来有个2级的网友告诉我autoresetevent 把问题轻松解决了,线程之间切换耗时0毫秒,你当时也在那个帖子,也是说一大堆打击人的话,其实你也不知道autoresetevent这个东西,也是别人发出来了以后才去搜的吧?不然一句话就解决的问题,根本不会说那么多没用的了 至于这个问题,我刚才特意下了个鲁大师,温度压力测试,并把100ms改为3ms,结果还是这样的结果 明明自己不懂也就算了,还非要装出一副专家的样子,实践证明 你懂个屁的系统?或许你看了一些书,那也是书呆子,没有自己理解 另外,我从这个月开始学的c#,像什么变量之类的都没细看,用到了再去翻在线手册,以前就看过一些php代码,但是没具体做过东西,我觉得你们这些等级高的人压根和高手不搭边,想想也是,真是高手就不会那么多无用的话了,想让别人尊重你,你得有真材实料,而不是说一些空话,可笑的是 上个帖子里的那个人在不停地教我做人的道理,你跟他完全一个类型的,没真材实料 爱摆臭架子 [/quote] 不怕不懂,怕的是你不懂还不虚心学习。。。
蜗牛慢慢趴 2015-06-12
  • 打赏
  • 举报
回复
引用 6 楼 rbbcnm 的回复:
[quote=引用 5 楼 sp1234 的回复:] 如果你在教高级的电脑、而又什么都不运行(CPU占用几乎为1%、2%)的情况下测试这么简单的程序,那么你自然得到貌似很准确的Sleep结果。 但是如果你运行另外两三个占用内存上百兆、占CPU15%以上的进程,或者你的程序是一个复杂多任务程序,并且你的进程中的线程也不是非常高优先级的,再来看Sleep(并且不要搞100这么大、这么整的数字),就经常会出现误差了。
你是在混分吗?老是在教别人逃避问题,你解决不了也就算了,还装出一副高手的样子,这几天来csdn碰到多个你这种人了 我用多线程时,他洋洋洒洒一大篇,讽刺我在用多线程,还说让我用异步啥的,到最后还是用到了多线程,其实根本不需要知道异步是什么东西,我在网页的在线手册里也没有列出什么异步,但我那个帖子后来解决了问题,每个线程间相隔固定的时间 就是异步了,后来有个2级的网友告诉我autoresetevent 把问题轻松解决了,线程之间切换耗时0毫秒,你当时也在那个帖子,也是说一大堆打击人的话,其实你也不知道autoresetevent这个东西,也是别人发出来了以后才去搜的吧?不然一句话就解决的问题,根本不会说那么多没用的了 至于这个问题,我刚才特意下了个鲁大师,温度压力测试,并把100ms改为3ms,结果还是这样的结果 明明自己不懂也就算了,还非要装出一副专家的样子,实践证明 你懂个屁的系统?或许你看了一些书,那也是书呆子,没有自己理解 另外,我从这个月开始学的c#,像什么变量之类的都没细看,用到了再去翻在线手册,以前就看过一些php代码,但是没具体做过东西,我觉得你们这些等级高的人压根和高手不搭边,想想也是,真是高手就不会那么多无用的话了,想让别人尊重你,你得有真材实料,而不是说一些空话,可笑的是 上个帖子里的那个人在不停地教我做人的道理,你跟他完全一个类型的,没真材实料 爱摆臭架子 [/quote] 年轻
加载更多回复(23)

110,538

社区成员

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

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

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