大家帮忙看下这段代码,如何优化!

能写程序-会种庄稼 2012-03-18 01:30:51


太耗性能了
...全文
194 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
线程存在的意义在于 GetPerformanceCounter的调用需要固定到某一个CPU内核上。这在msdn以及很多帖子中都有说明。 其实说白了,我主楼的帖子就是练习代码,并没有具体的应用场景,因为看到代码执行很消耗时间,就拿过来问问,也算收获不小。主要是双精浮点的非原子性,另外回复中提到的一些东西我搜索了一下,也看到很多有用的东西。 至于说win平台的非实时性,如果真有实时性需求,那自然应该考虑rtos。

ok,结贴。 都有分~
draracle 2012-03-20
  • 打赏
  • 举报
回复
1.x64是指在64位系统下运行64位程序。
2.32/64系统下,未对齐的内存操作所需要的周期远远大于对齐的内存。是否对原子性有影响,个人看法是不会。因为单独一个mov指令是原子的。如果是单核单线程,没问题,这个大家都应该没意见。但在多核的情况下,个人认为cache的管理机制应该决定了单一存取指令访问cache的原子性。
3.我的意思是取消这个线程,这个线程的存在毫无意义。你可以封装一个GetCurrentTimeInMicroSec的方法。让需要这个时间的线程自己调用去。我不知道你用这个时间的用途是什么,如果想实现精密的授时,windows这个平台就不适合。windows单一线程的执行窗口时间就是16ms。
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 draracle 的回复:]
x64问题不大,32就有问题了,4字节才是原子操作。

你要高精度定时,又要减少CPU占用。。。唯一办法就是让外面使用该变量的函数自己去计算当前时间。
[/Quote]

1、x64是只要硬件满足还是需要x64的软件配合?
2、32/64下,未4/8字节对齐是不是也有问题?
3、你意思线程中只读取计数器,外边做差?
hztj2005 2012-03-19
  • 打赏
  • 举报
回复
这是我去年发的一个帖子:
http://topic.csdn.net/u/20111014/19/a1fd5321-57e6-441d-8459-9ccc6ea0ae2d.html
draracle 2012-03-19
  • 打赏
  • 举报
回复
x64问题不大,32就有问题了,4字节才是原子操作。

你要高精度定时,又要减少CPU占用。。。唯一办法就是让外面使用该变量的函数自己去计算当前时间。
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 dnkuni 的回复:]
引用 12 楼 bigwatercar 的回复:

引用 10 楼 dnkuni 的回复:
怎么优化不知道,不过你在线程中修改double值不安全。

怎么不安全了?会崩溃吗? 这个不牵扯同步锁,因为外边需要时间的线程都是只读的。

可能double被改了一半就被读取了。
[/Quote]
之前没看过这种说法,受教了,有道理啊~
Dnkuni 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bigwatercar 的回复:]

引用 10 楼 dnkuni 的回复:
怎么优化不知道,不过你在线程中修改double值不安全。

怎么不安全了?会崩溃吗? 这个不牵扯同步锁,因为外边需要时间的线程都是只读的。
[/Quote]
可能double被改了一半就被读取了。
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dnkuni 的回复:]
怎么优化不知道,不过你在线程中修改double值不安全。
[/Quote]
怎么不安全了?会崩溃吗? 这个不牵扯同步锁,因为外边需要时间的线程都是只读的。
Dnkuni 2012-03-19
  • 打赏
  • 举报
回复
你这个函数的作用只是把counter转换成时间吧。我觉得你应该在使用定时器时把时间转换成counter
Dnkuni 2012-03-19
  • 打赏
  • 举报
回复
怎么优化不知道,不过你在线程中修改double值不安全。
  • 打赏
  • 举报
回复
sleep精度太差
  • 打赏
  • 举报
回复
本来就是为了提供一个时间,要是sleep,那就不准了。
96掌门师兄 2012-03-19
  • 打赏
  • 举报
回复
恩,主要是for()是个死循环,一直占用CPU.看允许sleep的话,就睡一下吧。
youngwolf 2012-03-19
  • 打赏
  • 举报
回复
vc2010性能分析功能是告诉你,你的黄色那条语句很耗资源,很耗资源有两种优化,基本上,一是优化算法,二是减少调用次数。

很明显,你的这个问题,只能减少调用次数。你在每一次循环的时候,稍微sleep一下,就解决问题了。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hsluoyc 的回复:]
弱弱问一句,这是什么IDE,咋还能算时间这么nb
[/Quote]
vs2010性能分析的功能
  • 打赏
  • 举报
回复
没人能给点儿建议吗? 其实宗旨就是,高精度定时,效率不要太损失。 不要局限于我贴的代码。
Casbin开源社区 2012-03-18
  • 打赏
  • 举报
回复
弱弱问一句,这是什么IDE,咋还能算时间这么nb
quwei197874 2012-03-18
  • 打赏
  • 举报
回复
*pTimestamp = (double)(c/f)
snmhm1991 2012-03-18
  • 打赏
  • 举报
回复
代码太少,你的循环终止条件没有发现在哪儿被调用

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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