gpt4 book ai didi

.net - Visual Studio 分析器 [clr.dll]

转载 作者:行者123 更新时间:2023-12-05 00:32:25 26 4
gpt4 key购买 nike

我正在尝试使用内置分析器在 Visual Studio 中分析 .NET 应用程序。跟踪 CPU 样本,我遇到了一些奇怪的事情。在应用程序的一部分中,我有以下内容(为清楚起见进行了简化):

var requestObject = new RequestObject(parameters);
var result = GetResult(requestObject,"stringvalue");

我看到第二行使用了大约 10% 的样本。然而,'GetResult()' 方法只使用了大约 7%,其余的似乎在 [clr.dll] 中。我知道 clr.dll 负责垃圾收集、JIT 编译、上下文切换等,并且“GetResult()”方法相当复杂(跨越多个程序集,可能使用多个线程)因此其中一些操作需要一旦方法返回就被采用。 “RequestObject”也有点复杂,因此可能与它有关。

我的问题是:我能否准确追踪这里发生的情况,以及如何使其更快?请注意,3% 听起来并不多,但“GetResult()”在程序生命周期内会被多次调用,即使在测试时它只运行一次。而且我可以减少应用程序的响应时间非常重要。

非常感谢您提供任何答案!

最佳答案

您并不是唯一一个试图弄清楚分析器输出意味着什么的人。
SO 有很多这样的问题。
我在一个大的 .net 应用程序中工作,我尝试过各种分析器,我知道这不是人们所教的,但真正有效的是 this method .
一方面,您可以在初始化期间获取一些样本,并在基本运行时获取其他样本。您不必将两者堆在一起并尝试猜测没有其他阶段的每个阶段的负载情况。

此外,如果您只看 CPU 时间,您将错过任何由于额外的 I/O 加速的机会。
你不应该假设没有任何东西,或者它是微不足道的。
如果您确实设法找到了仅使用 CPU 的加速机会并修复了它,那么您没有找到的部分将成为整体的较大部分。
您可能会遇到这样的情况:如果您找不到其他任何东西可以修复,您可能会假设没有其他东西,而实际上确实存在,并且它可能很大。
如果您自己取样,您可以清楚地了解什么是花费时间。

您可能想说“但这不准确!”
好吧,如果有什么你可以修复,修复它会节省 90% 的时间,但是你的询问是不准确的,并说它需要 80% 或 95%,这是否会阻止你修复它并获得 10-倍加速?
事实是,当您的目标是实际发现问题而不是仅仅测量问题时,问题越大,所需的样本就越少。

关于.net - Visual Studio 分析器 [clr.dll],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13378213/

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