Tag: profiling

C# – 试图找到剩余的EventHandler,防止控件超出范围

长话短说,我inheritance了一个相当复杂的应用程序,我试图追踪涉及表单的内存泄漏。 现在,每次关闭表格并提出新表格时,旧表格仍留在记忆中。 我跟踪了一个由程序中的控件拥有和设置的静态事件的问题(显然,只要静态事件被设置,该控件的任何实例都不被认为超出了范围,即使没有其他人提到所述控件)。 现在,我正在努力追查剩下的问题。 使用MemProfiler和ANTS Memory Profile,我了解到根执行路径如下: FormOpenWatch <– The item which remains active System.EventHandler — (this as Delegate)._target System.Object[] System.EventHandler — (this as MultiCastDelegate)._invocationList System.ComponentModel.EventHandlerList+ListEntry — handler System.ComponentModel.EventHandlerList+ListEntry — next System.ComponentModel.EventHandlerList+ListEntry — next System.ComponentModel.EventHandlerList+ListEntry — next System.ComponentModel.EventHandlerList+ListEntry — next System.ComponentModel.EventHandlerList — head PTU.MdiPTU — (this as Component).events <– The base application 任何人都对我可能想要的东西有任何见解? 我发现在基本应用程序中添加了一个Shown事件,并确保在处理表单时将其删除,但这似乎没有解决问题。 非常感谢您提供的任何帮助。 […]

如何只分析一个类库?

我想分析一个类库项目的CPU使用情况,该项目使用VS2012编译成一个dll。 当我进入分析 – >启动性能向导时,我可以选择要分析的项目,但它只允许我分析可执行文件,因此我无法分析我的库。 如果我描述我的两个项目(一个是从我的库运行函数并显示一些输出的非常简单的表单),那么System.Windows.Forms.Application.Run占用我样本的97% – 我真的不关心表格的性能成本,它压倒了其他一切。 我怎样才能看到我的dll的性能数据?

Visual Studio Profiler输出

我写了一个执行Main()小类,然后执行A() 。 我希望Main()方法在堆栈调用的根目录上独立,因为它是我应用程序中最顶层的函数。 所做的一切都应该由 Main()执行。 我编写了以下代码来测试: namespace ProfilerTest { class Program { static int _a; static void Main() { while (true) { A(); } } static void A() { _a += 1; } } } 但是,Profiler调用树的输出显示A()不仅通过Main()执行,而且还在与main函数相同的级别执行。 我的期望(注意我从调用树中删除了最后一行): ProfilerTest.exe 10.333 ProfilerTest.Program.Main 10.333 ProfilerTest.Program.A 5.897 为什么是这样? 我期待的不正确吗? 或者我是否误解了分析器结果?

极低的FPS,我应该使用什么样的分析应用程序来查找性能问题?

我正在创建一个XNA游戏并获得意想不到的结果,极低的FPS(约2-12 fps)。 我应该使用什么程序来测试性能并找出降低速度的程序?

如何隐藏miniprofiler?

我正在使用MVC Mini分析器来检查我的应用程序的特定部分的速度,并希望将其保留在那里以防万一发生以后的事情,我可能需要检查“出了什么问题”。 它不是一个完整的日志集,但它非常方便地知道什么使页面花了很长时间。 因此,我的目标是隐藏它并仅在请求带有特定参数时才对其进行配置。 但是,我的尝试都没有像我期望的那样奏效。 这已经完成了不在屏幕上显示它的技巧(视图中的代码): @if (Request.QueryString.AllKeys.Contains(“showProfiler”)) { @MvcMiniProfiler.MiniProfiler.RenderIncludes() } 这是接近的尝试。 正确地隐藏迷你探查器信息,但是在我显示它的那一刻,它描述了自我停止显示它以来的所有内容。 所以,假设我描述了我的页面,需要3秒钟。 我删除了查询参数并再次加载页面三次。 我再次添加我的参数,我看到4组配置文件信息。 这意味着它会记录所有内容,我想知道它是否会给内存带来问题。 尝试不再发生这种情况: 尝试1: protected void Application_BeginRequest() { if (Request.QueryString.AllKeys.Contains(“showProfiler”)) { MiniProfiler.Start(); } } 尝试2: protected void Application_EndRequest() { MiniProfiler.Stop(!Request.QueryString.AllKeys.Contains(“showProfiler”)); } 尝试3: protected void Application_EndRequest() { MiniProfiler.Stop(true); } 这些都没有奏效。 有任何想法吗?

如何分析我的C#应用​​程序?

可能重复: 什么是一些好的.NET Profilers? 有没有像样的C#个人资料呢? 我经常想在我们团队的项目中分析代码来比较速度和效率。 但是,根据Microsoft的性能分析初学者指南 ,Visual Studio性能向导不是Visual Studio 2010 Professional的一部分,这是我们使用的。 鉴于此限制,似乎需要第三方应用程序。 我怀疑我能说服我的老板在分析应用程序上花很多钱。 我有什么选择,如何使用这样的工具? 编辑 感谢您提供有关哪些分析器可用的其他问题的链接。 很有用! 我正在编辑这个问题,以便更多地关注如何使用这些分析器。 有什么重大差异吗? 在可用性?

有什么方法可以在Sql Profiler或类似的工具中获得.net堆栈跟踪?

在我之前的工作中,我设计并帮助构建了一个运行时(生产) Profiler工具 ,除了其他很酷的function之外,它还能够为每个执行的SQL语句提供.Net堆栈跟踪。 将其视为类固醇上的SQL-Server Profiler。 因此,您不仅可以看到SQL语句和持续时间,还可以获得执行SQL的上下文。 在开发以数据库为中心的应用程序时,我发现此信息是上帝发送的。 问题是,由于这是开发的,我以前的公司已被赛门铁克收购,虽然该工具仍可下载,但很不清楚许可是什么,而且不是SKU Symnatec正在销售的。 我想知道是否有人知道任何类似的工具会给我堆栈跟踪我的SQL语句执行? alt截图http://img151.imageshack.us/img151/4357/profiler1jz3.gif 这仍然没有答案,ANTS等人不这样做,只考虑回答否并接受它。

分析C#/ .NET应用程序

如何跟踪/配置.NET应用程序? MSDN在线帮助提到了Visual Studio Team(我没有),还有Windows Performance Toolkit。 但是,您可以推荐其他解决方案吗? 优选(当然)一种解决方案,无需更改代码(手动)即可工作,并且可以集成到Visual Studio中。

使用秒表分析.NET应用程序

似乎没有免费的* .NET性能分析器可以逐行进行分析。 因此,我正在研究使用秒表进行性能分析。 *在自由中免费,即许可包括商业应用。 编辑:回应那些告诉我“买一个探查器”的人,我想,但如果我可以花那么多钱,我就会花在别的东西上。 我试图说服我的老板,一个分析器是值得的,但没有太多运气。 这个问题主要基于好奇心。 我永远不会认为秒表是真正的探查者的替代品。 我有一个小测试应用程序(用C#编写),用于衡量在每行使用秒表时的性能差异。 测试代码是这样的: int n = 100; BigInteger f = 1; for (int i = n; i > 1; i–) { f *= i; } 以下是完整代码: http : //pastebin.com/AvbQmT32 我为每行代码都有一个秒表。 这是我的“探查者”。 我整个节目也有一个秒表。 这是我的’profiler profiler’。 我将程序配置为发布模式,任何CPU(在x64计算机上),并禁用优化。 当我在禁用探查器的情况下运行程序时,我会得到这样的结果: Line | Ticks ——————————|———- | Total time: | 359 当我在启用了探查器的情况下运行它时,我会得到这样的结果: Line | […]

在分析应用程序时,VSP2340环境变量突然发出问题

任何人都可以解释为什么我在尝试从VS2012内进行任何类型的性能分析(我总是这样)时突然得到这个。 VSP2340: Environment variables were not properly set during profiling run and managed symbols may not resolve. Please use vsperfclrenv before profiling. 我用谷歌搜索并尝试了一些东西,但我无法找到如何在VS2012内再次使用它。 几个星期后我发现有人回答相同的问题: VS2013:“VSP2340:环境变量设置不正确”,即使从IDE运行也是如此 提前致谢。