- 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/
以下是 redgates 源代码管理中的 git.xml 文件的摘录 Commit git commit -F "($MessageFile)" -o "($ScriptsFolder)\" ex
使用 Redgate SQL 数据比较 9。 这是我想做的事情的一个简化示例。我有以下表格: Product (ProductId, ProductName) ProductDetai
我正在使用 Red Gate SQL Developer 开发数据库工具。 SQL Test ,运行 tSQLt 测试的 SSMS 加载项缺少重命名测试类的方法。 我有一个名为 [BackendLay
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
Ants profiler 似乎在同一时间对代码进行检测和采样,我觉得这很有趣 我使用了 VS 分析器,你必须运行两个不同的分析 session 来识别瓶颈 - ANTS 如何在不修改代码并将代码注入
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
RedGate ReadyRoll 是否支持 MySQL 数据库?谁能提供支持的数据库列表?谢谢! 最佳答案 ReadyRoll暂时只支持SQL Server。 展鹏提供 Schema and Dat
我们有一个包含大约 15-20 个数据库的 SQL Server 实例,我们在 RedGate 的帮助下将其 checkin TFS。我正在编写一个脚本,以便能够在这些脚本的帮助下复制实例(例如,开发
乔尔总是在说有多棒SQL Compare from Redgate software是。 SQL Compare 仅适用于 Microsoft SQL Server 数据库,但是否有一款适用于 MyS
我最近升级到 SSMS 2016 并且我在 2014 年使用的 Redgate 工具仍然存在,但在 2016 年丢失了。我需要卸载并重新安装 Redgate 吗?如果是这样,我需要在这样做之前停用我的
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 去年关闭。 Improve th
我正在尝试为 VSTS 上的数据库创建 CI/CD 管道,并使用 Redgate ReadyRoll 将其部署在 Azure SQL Server 上。但我陷入了构建过程。以下是我使用的任务: 设置影
我从以前的角色开始在一家新公司工作,在那里我可以依赖 Redgate 的 SQL Prompt 和 MySQL 环境。我现在正在使用 Postgresql 环境 (SQL Workbench/J),想
如果我们在共享位置安装了 Redgate 工具“Schema Compare of Oracle”,我们可以从不同的机器或网络访问“SCO.exe”命令行吗?如果是,我们可以同时运行多个实例吗? 如果
我们希望从手动脚本转移到 RedGate 数据库源代码管理来管理我们的数据库。 我们想对存储的过程/查找等进行更改,然后将它们 checkin SVN 主干,这将触发新的 TeamCity 构建。我看
我正在使用 TeamCity 为我们的测试环境创建 .NET 应用程序的 CI 和自动部署(通过 SVN 进行源代码控制),一切进展顺利。我正处于想要自动执行数据库脚本的阶段。我做了一些搜索并阅读了几
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
在 Commit 选项卡中,显示的分支是灰色的 master。 在我的 GitHub 中,我已经建立了一个 develop 分支,并希望将我的更改提交到该分支。如何更改 RedGate SQL 源
我们正在尝试开始使用 SQL 源代码控制,但有一些问题。 这就是我的目标。这看起来可行吗? 修改开发数据库表/过程 提交到开发 PC 上的开发 git 分支 将更改推送到中央存储库 针对每个更改重复步
我正在运行一个大型 ASP.net 4.0 网站。它使用流行的 .Net 内容管理系统,拥有数千个内容项,数百个并发用户 - 基本上是一个重量级网站。 在 1 天的过程中,IIS7 工作进程的内存使用
我是一名优秀的程序员,十分优秀!