Articles of 分析

我怎样才能剖析文件I / O?

我们的构build令人烦恼地慢。 这是一个用Ant构build的Java系统,我正在Windows XP上运行。 视硬件而定,可能需要5到15分钟才能完成。 在机器上观察整体性能指标,并将硬件差异与构build时间相关联,表明该过程是I / O限制的。 这也表明,这个过程比写作要多得多。 但是,我还没有find一个很好的方法来确定哪些文件正在被读取或写入,以及多less次。 我的怀疑是,有了我们的许多子项目和随后的编译器调用,构build会多次重新读取相同的常用库。 什么是一些分析工具,会告诉我一个给定的过程是用什么文件做的? 免费是好的,但不是必需的。 正如Jon Skeet所build议的,使用Process Monitor,我能够证实我的怀疑:几乎所有的磁盘活动都是读取和重新读取库,而JDK的“rt.jar”和其他库的副本位于顶部列表。 我无法制作足够大的RAM磁盘来存放我使用的所有磁带库,但在RAM磁盘上安装“最热”磁带库的时间减less了大约40%。 显然,Windows文件系统caching工作并不够好,即使我已经告诉Windows为此做了优化。 我注意到的一件有趣的事情是,对JAR文件的典型“读取”操作只有几十个字节; 通常有两三个,然后在文件中跳过几千字节。 这似乎不适合大量阅读。 我将在闪存驱动器上对所有第三方库进行更多testing,并查看其效果。

我可以使用哪些工具来确定应用程序的硬件要求?

对于普通读者:传奇™继续… 我的应用在我的开发机器上运行良好 – 这是5年前购买的一款相当不错的游戏装备。 因此,这是64位,具有2.2GHz的时钟速度和2GB的内存。 但是,工作的机器是标准的戴尔问题办公室电脑,甚至很难启动我的应用程序,更不用说运行它了。 ( 解释…我可以想象,人们对我尖叫:“你究竟在做什么来要求这样的规范?”那么,我正在做大量的实时图像分析和audio生成。 我们的团队有预算购买专用笔记本电脑(需要便携式)来运行它。 所以现在我已经负责生成一个最低要求的规格。 我可以使用哪些工具来确定能够舒适地运行我的应用程序的最低规格? 更新:到目前为止,答案虽然有用,但更侧重于分析的替代scheme。 所以我已经提出了一个赏金,看是否有任何软件会做这种事情。

我可以使用什么工具分析内存使用情况?

我有一个使用C ++使用Visual Studio 2008编写的Windows应用程序。我想要获得有关内存使用情况的统计信息,以查找有关内存使用情况的瓶颈和位置。 理想情况下,我想有一个工具,可以做到这一点,而不必进入并添加计数器/分析逻辑到代码本身。 基本上我正在寻找的是: 所有的分配清单(释放或不是重要的,我想知道每次分配的东西) 每个分配的调用堆栈和一个计数器,代表调用代码和分配内存的次数。 关于什么内存已被释放vs没有释放(查找泄漏)的信息。 理想情况下,它将足够智能,以确定内存是否仍在使用中,或者是否真的已经泄漏(通过示波器或其他智能机制)。 我不在乎它是否是免费的工具。 以下是我已经看过的一些工具: Rational PurifyPlus :老实说,我一直没有能够使用这个工具。 它返回了很多误报。 另外,它并没有给我在我上面的列表中的前两个项目,而是似乎只关注内存错误和泄漏。 Sysinternals VMMap :这个工具很有趣,可以让我看看内存是如何分布的(堆栈vs堆vs共享堆等)。 它也让我看到分配的调用树,但不是很直观或有帮助。 数据很难理解。 DevPartner Boundschecker :我真的认为这是迄今为止最无用的工具。 多年以前,我在用DevPartner买下它之前就使用了它,我记得它工作得更好。 但它并不真正给我所需要的统计数据,也不能正确地检测内存泄漏。 我提前感谢任何帮助/build议。 我的应用程序是一个服务器,在压力testing过程中随着时间的推移会遭受严重的内存增长问题(并且由于虚拟字节超过了32位应用程序的限制而最终崩溃)。 有合适的工具将帮助我隔离我们正在分配内存,也可能会泄漏内存。

捕获Xperf中的callstack和事件

对于这个愚蠢的问题抱歉。 我是Xperf的新手。 我在64位Windows 8.1上,我的应用程序也是x64。 我想在应用程序中使用Xperf捕获这两个调用堆栈和我定义的事件。 我在我的应用程序中注册了GUID 35f7872e-9b6d-4a9b-a674-66f1edd66d5c 。 当我使用时: xperf -on PROC_THREAD+LOADER+Base -start UserSession -on 35f7872e-9b6d-4a9b-a674-66f1edd66d5c -BufferSize 1024 -stackwalk profile 我可以得到所有的事件,但没有调用堆栈。 但是,如果我删除-on 35f7872e-9b6d-4a9b-a674-66f1edd66d5c并且命令行变成: xperf -on PROC_THREAD+LOADER+Base -start UserSession -BufferSize 1024 -stackwalk profile 这样,我能够捕获所有的调用堆栈,但没有定义的事件。 任何人都可以告诉我什么是正确的命令行来捕获调用堆栈和事件? 此外,如果你能指出我的任何好的Xperf参考,它会更大。