【发布时间】:2011-08-30 09:09:00
【问题描述】:
我正在 char 数组中搜索几个字节。问题在于,在较慢的机器上,进程的 CPU 使用率高达 90% 以上。如何防止这种情况?我的代码是:
for(long i = 0; i < size - 5; ) {
if (buff[++i] == 'f' && buff[++i] == 'i' && buff[++i] == 'l' && buff[++i] == 'e') {
printf("found at: %d\n", i);
}
}
编辑: 字符串“file”不是以 null 结尾的。
【问题讨论】:
-
除了把
sleep()电话放在那里,我看不到很多选择。 -
@Voo:把 Sleep() 放在哪里?
-
@Blez 我认为他在开玩笑- sleep 插入至少 1 秒的暂停,因此在 3k 字符串上,您的程序将花费近 1 小时的时间通过字符串休眠。我承认,CPU 使用率非常低。
-
@fvu 嘿,它会解决问题 ;) 但我是认真的,虽然一个更好的算法(即 STL)显然是第一件事要做,如果你仍然想限制完成的处理量然后使用
sleep或nanosleep(我认为 MS 没有实现,但有Sleep或者只是使用 boost 来解决 Xplatform 问题)是我看到如何解决这个问题的唯一方法 - 显然不是在每次循环迭代后睡觉但创建两个循环:即搜索前 X 个字符,睡眠 Yms,重复。 -
好吧,乍一看,实际上使用睡眠并不是第一个或最好的想法,但通常最好的方法有一个大问题,即它基本上是不可移植的。但在 Windows 下,您可以将进程的优先级设置为低于 NORMAL 的值(vista+ 也允许降低 IO 优先级)。虽然我不知道这在 POSIX 下是如何工作的..
标签: c arrays optimization