delphi – 如何提高分析的准确性

前端之家收集整理的这篇文章主要介绍了delphi – 如何提高分析的准确性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想改善一些代码的运行时间.

为了我第一次使用所有相关代码的运行时间,使用如下代码

before:= rdtsc;
myobject.run;
after:= rdtsc;

然后我放大并计时相关部分,如下所示:

procedure myobject.part;
begin
  StartTime:= rdtsc;
  ...
  EndTime:= rdtsc;
  inc(TotalTime,(EndTime- StartTime));
end;

我有一些代码可以将时间复制粘贴到Excel中,典型结果如下:

(89.8%和10.2%加起来100%是巧合,与数据或问题无关)
(当数据显示1时,它表示0表示避免除以零错误)

注意运行A和运行B之间的区别.
我还没有改变任何东西,所以运行A和B应该给出相同的运行时间.
进一步请注意,我知道在两次运行中,程序部分的调用次数完全相同(数据相同且算法具有确定性).

程序部分的运行时间很短(只需多次调用).
如果在这些短暂的运行时间(少于700个cpu周期)中有某种方法可以阻止其他进程,那么我的计时会更准确.

如何让这些时间更可靠?
有没有办法垄断cpu只在定时时运行我的任务而没有别的?

请注意,我不是在寻找明显的答案,例如:
关闭其他正在运行的程序
– 禁用virusscanner等……

我已经标记了Delphi的问题,因为我现在正在使用Delphi(并且可能有一些特定于Delphi的选项来实现这个结果).
我还标记了它与语言无关,因为可能有一些更通用的方法.

更新
因为我正在使用cpu指令RDTSC,所以我不受cpu限制的影响.如果cpu减速,则循环次数保持不变.

UPDATE2
我有2个答案,但都没有回答这个问题……
问题是如何防止这些运行时间的变化?
我是否必须运行代码20x并始终比较20次运行中的最低运行时间?
或者我将程序优先级设置为实时?
还是有其他一些技巧可以使用,所以我的代码示例不会被中断?

解决方法

To want to improve the running time of some code.

In order to that I first time the running time of all relevant code,…

好吧,我在这个问题上有点记录,但很多人认为改善运行时间需要先准确测量.

不是这样.

改善运行时间需要找出需要花费很长时间的时间(确切的分数无关紧要)并且不同地做或者根本不做.
它的作用往往不是通过计时个别例程来揭示的.

Here’s the method I use,
here’s a very amateur video of it.

猜你在找的Delphi相关文章