Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#:运行时代码评测-是否有任何现有库?_C#_Performance_Profiling_Runtime - Fatal编程技术网

c#:运行时代码评测-是否有任何现有库?

c#:运行时代码评测-是否有任何现有库?,c#,performance,profiling,runtime,C#,Performance,Profiling,Runtime,我有一个应用程序,用户可以将节点连接在一起执行实时计算。 我希望能够向用户显示CPU使用率百分比,以显示可用CPU时间的使用量,以及每个节点的细分,以便能够发现问题区域 对于这样的运行时分析器,是否有可用的开源实现? 我可以使用System.Diagnostics.Process.TotalProcessorTime、秒表/性能计数器编写自己的程序,但我更愿意使用一些经过尝试和测试的程序,如果可能的话,这些程序稍后可能会为我提供更详细的信息 编辑: 我不想找一个独立的分析器,因为我想在我的应用程

我有一个应用程序,用户可以将节点连接在一起执行实时计算。 我希望能够向用户显示CPU使用率百分比,以显示可用CPU时间的使用量,以及每个节点的细分,以便能够发现问题区域

对于这样的运行时分析器,是否有可用的开源实现? 我可以使用System.Diagnostics.Process.TotalProcessorTime、秒表/性能计数器编写自己的程序,但我更愿意使用一些经过尝试和测试的程序,如果可能的话,这些程序稍后可能会为我提供更详细的信息

编辑: 我不想找一个独立的分析器,因为我想在我的应用程序的UI中显示实时统计信息。

你可以试试具有这种功能的商业分析器


或者开源,但它仍然是beta版。

我假设你正在运行一个计时器,比如说每秒10次计算,因为否则你只是在使用100%的CPU(除非你也在做I/O)

您是否可以将闹钟中断设置为以某种合理的频率关闭,如10或100 Hz,与程序正在执行的任何其他操作无关,尤其是在I/O或其他阻塞时间

然后,对于每个块,只需记录它在过去100次中断中处于活动状态的次数。这是你的百分比,而获得它的成本是最低的

块是否作为子例程相互调用?在这种情况下,在每次中断时,您可能希望捕获块之间的调用堆栈,如果某个块位于堆栈的某个位置,则该块是“活动的”,如果它位于堆栈的末尾,则该块是“压缩的”(不在调用另一个块的过程中,也不在I/O中)。然后,您可以在每个块上选择指示其“压缩”的时间百分比(在块上求和时不超过100%)或“活动”(在块上求和时可能超过100%)


后一个数字的价值在于,它不会告诉你时间花在哪里,而是告诉你为什么。这可以回答诸如“我知道foo花费了很多时间,但我是如何做到的?”之类的问题,I/O也是如此。这也是一个过程,它只发生在其他硬件上。您不想忽略它,因为如果您这样做,您可能会说“为什么我只使用了CPU的一小部分?占用率是多少?”

听起来您只是想要每台机器或进程的CPU使用率,而不是像代码分析器提供的每种方法的详细分解。我想要以%为单位的CPU总使用率和每计算节点的%。因此,现在在每个节点的计算开始和结束时获取性能计数器就足够了,但稍后我可能想添加更多关于CPU时间去向的深入信息。如果小于,则说明您的代码有问题。就像使用If语句的程序员不确定自己在做什么一样?:)作为一个独立的分析器,这很好,但我想在应用程序本身中进行评测,以便在应用程序的UI中向用户显示实时统计数据。我不是在运行计时器,我在计算和渲染一些东西,这意味着我受监视器垂直刷新的约束,其他东西也需要时间(例如GPU)@IUsedToBeAPygmy:请注意,即使计时器/vsync以很高的速率运行,您获取堆栈采样的速率也不一定要很高。它只需要与另一个不相关。