- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
Ants profiler 似乎在同一时间对代码进行检测和采样,我觉得这很有趣
我使用了 VS 分析器,你必须运行两个不同的分析 session 来识别瓶颈 - ANTS 如何在不修改代码并将代码注入(inject)编译函数的情况下捕获 IO 绑定(bind)函数调用?
编辑: Ant 使用仪器还是采样?
最佳答案
Ants profiler 提供了几种不同的profiling 模式,其中一些使用采样,一些使用instrumentation(instrumentation 模式仅在专业版中可用,sampling 模式是最近才引入的)。可用模式的简要说明是 here ,以及不同模式之间的比较。
RedGate 没有发布关于他们的分析器如何工作的技术细节,但从实验中我没有发现与其他分析器的工作方式有任何显着差异(只是一个不同的用户界面,我确信在某些领域有优化或其他分析器中不可用的边缘特征)。根据您的问题,我猜您对其他分析器有些熟悉,但如果您对它在较低级别上的工作方式感兴趣,这里有一个简短的概述:
在采样模式下,分析器会定期运行操作系统中断来暂停程序执行,并检查程序当前处于什么方法。二进制或中间语言汇编中的每个方法都由一个指令集组成。执行程序时,每个线程都将沿着该指令集前进,在调用方法时跳转到不同的指令集位置。线程执行的当前位置可以看作是指向该指令集中某个位置的指针,您可以找出该地址是针对给定方法的指令集。因此,探查器构建了一个指令集位置到方法名称的映射,当它暂停程序时,它会检查当前执行的位置。通过将其映射到方法名称,它可以计算该方法被调用的次数以及运行时间。但由于这只是一个示例,可能还有其他我们没有注意到的方法被调用,因为它们在我们在下一个间隔暂停程序之前返回。
在检测模式下,分析器会将额外的指令注入(inject)程序的指令集中。假设您有一个指令集 A->B->C
,它在调用 doSomething()
方法时被调用。一个非常粗糙的分析器可以注入(inject)额外的指令来做类似的事情
long starttime = currentTime()
A
B
C
long endtime = currentTime() - starttime
这将告诉您运行该方法所花费的时间。当然,现代分析器会做比这更精细的指令来优化性能,获取每行的性能,获取内存和 IO 信息以及时序信息等,但原理是相同的。
现代操作系统还具有获得硬件级诊断的良好能力,因此分析器可以获得有关大多数系统的更多详细信息,包括内存、磁盘 IO、CPU 利用率等。这些不同系统的工作方式是非常特定于设备和驱动程序。
请注意,此注入(inject)可以在不同阶段完成 - 在源代码级别、执行前的二进制级别、运行时等。特别是对于像 C# 这样的语言,在编译和汇编执行之间有一个中间阶段( CLR),在运行时注入(inject)这些附加指令会更容易。它还允许您在运行时使用自定义指令包围内部 .NET 框架内的方法(例如我认为您正在询问的 IO 操作),以便即使您没有原始来源也可以获得性能信息代码。这再次依赖于它构建从指令集到方法名称的映射的能力,但不同之处在于您仍然可以注入(inject)额外的指令而无需求助于采样。我认为您可以采取一些特殊的预防措施来使这变得更加困难,但是 Microsoft 并没有真正的动机对 .NET 框架的内部结构执行此操作。
关于c# - RedGate Profiler 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6527597/
在 Python 2.7 和 Python 3.6 中,我发现这有效: from cProfile import Profile; p = Profile(); p.enable() ...而这引发了
我正在尝试在 Windows 8 PRO 64 位上的 Visual Studio 2012 RTM 中为控制台程序启动性能分析 session (分析/启动性能分析)。 我收到一条弹出消息通知我 C
我在 windows 上有一个应用程序,它在单声道上运行得很好。但是,当我尝试对其进行分析时: mono --profile=log program.exe 我得到: The 'log' profil
我正在尝试使用 Django 创建注册表单。我在提交表单时收到此错误。 这就是我所做的。 models.py from django.db import models from django.cont
是否可以从 Flash Builder 导出分析结果? 我需要它们,因为我想根据方法名称进行过滤,但 Flash Builder 的内置过滤不允许这样做。 最佳答案 它隐藏在 GUI 的一个完全隐蔽、
我真的很喜欢热图,但我需要的是热图背后的数字(又名相关矩阵)。 有没有简单的方法来提取数字? 最佳答案 从文档开始追踪有点困难;具体来说 来自 report structure然后深入研究以下函数 g
我有一个 POM,它声明了我的项目常见的 Web 应用程序内容。我将它用作所有 Web 应用程序的父级。 是否可以仅在包装为 war 时激活配置文件?我已经尝试过属性方法,但这不起作用(因为它不是系统
在数据帧上运行 pandas-profiling 时,我看到它将索引分析为一个变量。注意:我的索引是唯一键(命名为UUID) 有没有办法排除引入索引上报? 我知道我可以在 pandas 中删除它,但在
在数据帧上运行 pandas-profiling 时,我看到它将索引分析为一个变量。注意:我的索引是唯一键(命名为UUID) 有没有办法排除引入索引上报? 我知道我可以在 pandas 中删除它,但在
我正在使用 Intel Vtune 来分析需要在另一台机器上进行 sudo 访问的远程应用程序。之前我已经能够在不需要 sudo 访问的那台机器上分析远程应用程序,但英特尔 Vtune 不适用于需要
我已经在我的 MVC 4 应用程序上安装了 Mini-Profiler,它运行得非常棒。我遇到的唯一问题是 UI 覆盖了我 UI 的关键部分。我可以使用 css 在页面上移动它,但理想情况下我想这样做
在使用 Chrome devtools 分析堆快照时,我似乎无法弄清楚查看分离的 DOM 树时颜色的含义。红色和黄色有什么区别? 最佳答案 有很好的解释available here . 从文章: Re
分析器中 SQL Server 跟踪的输出包含 CPU 和持续时间列(以及其他列)。这些值的单位是什么? 最佳答案 CPU 以毫秒为单位。在 sql server 2005 及更高版本中,保存到文件或
我有一个奇怪的问题,我正在使用 MiniProfiler,它很棒,在我的本地机器上没有任何问题,但它在我们的测试服务器上的表现似乎有所不同。它似乎会生成许多对 mini-profiler-resour
我想知道优先级 的application-{profile}.properties文件,如果有多个 spring.profiles.active添加。 例如: 比方说,我有这个 spring.prof
我有一个名为“isActive”的助手和一个名为“create”的模板.. 见下文 Template.create.isActive = function () { return Meteor.u
这是我面临的场景:我正在使用 MiniProfiler 来分析一些操作。但它缺少我必须使用的特定功能。有一个设置文件 MiniProfiler 可以让我做一些配置,比如分析什么考虑什么,什么不考虑,什
哇,这完全令人困惑,而且 dojo 1.8 文档似乎是围绕构建层的完整 clusterf**k。有人知道那里发生了什么吗? 在构建脚本示例配置文件中,示例 amd.profile.js 有 profi
我正在为一个内部项目使用出色的 MVC Mini Profiler,但希望它能够显示时间信息,无论您是谁。理想情况下,如果用户是站点的管理员或开发人员,我希望能够显示完整的分析信息,如果用户只是标准用
打开Android Profiler编译出现如下错误: FAILURE:构建失败并出现异常。 什么地方出了错: Execution failed for task ':app:transformCla
我是一名优秀的程序员,十分优秀!