gpt4 book ai didi

.net - 了解运行代码内时间计数器和代码外时间计数器之间的区别

转载 作者:行者123 更新时间:2023-12-02 20:33:46 25 4
gpt4 key购买 nike

好的。这个问题的标题不太容易解读,但让我解释一下。

为了建立共同点,我将提供一些详细信息,但这个问题适用于所有可能的上下文、语言和平台。

平台:.NET Framework 4.0系统:Windows(显然)语言:F#

我需要运行一个程序并评估执行某些指令所花费的时间。考虑有一个主要功能,在那里放置一个时间计数器:

open System.Diagnostics
let main args =
let watch = new Stopwatch ()
watch.Start ()
(* Calling functions and executing main body... *)
watch.Stop ()
(* Printing out the evaluated time *)

好的!我有时间,我很高兴。

现在我想测量这个时间,但从外部评估它。因此,考虑一个运行该文件但也计算时间的 PowerShell 脚本:

$MyProcess = New-Object "System.Diagnostics.Process";
$Watch = New-Object "System.Diagnostics.Stopwatch";
$MyProcess.StartInfo.FileName = "Myexec";
$MyProcess.StartInfo.Arguments = "args";
$MyProcess.StartInfo.CreateNoWindow = $true;
$MyProcess.StartInfo.UseShellExecute = $false;
$StartingTimer = $Watch.Start(); # Starts the timer
$StartingProcess = $MyProcess.Start();
$WaitingForExit = $MyProcess.WaitForExit();
$StoppingTimer = $Watch.Stop(); # Stops the timer
# Collectiong timings
$Ticks = $Watch.ElapsedTicks;
# Returning and printing
Write-Output "$Ticks";

嗯。我的问题是这样的:正如您所看到的,我们有两种不同类型的评估:代码内和代码外。我觉得那个时代不一样了!!!因为输出代码计时器将评估一些与我需要评估的程序不竞争的指令。例如上下文切换等等......在代码输出计时器中,如果 cpu 经历上下文切换,我将评估其他进程在其上下文切片期间完成所需的时间...

是这样吗?我说得对吗?

最佳答案

嗯,不太正确。
时间可能略有不同,但差异将是实际加载程序的开销。

这两种测量都会测量挂钟时间,包括上下文切换、等待 I/O、用户输入等。

如果您想测量实际的 CPU 使用情况(如 TaskManager 中的 CPU 时间列),您需要查看类 System.Diagnostics.Process您可以在哪里访问TotalProcessorTime

如果您想检查自己的流程,可以使用 Process.GetCurrentProcess() 找到对它的引用。 .

关于.net - 了解运行代码内时间计数器和代码外时间计数器之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com