我正在尝试使用JetBrains dotTRACE Memory分析IIS托管的WCF Web应用程序的内存使用情况.
在过去,我已经在同一个Web应用程序上成功使用了dotTRACE Performance,一切都运行良好,但我无法启动dotTRACE Memory.
当我尝试启动内存跟踪时,我得到的是:

搜索JetBrains的(通常很好的)支持文档没有发现任何结果.
有任何想法吗?
服务器:Windows 2008 R2(64位)
IIS:7.0
dotTRACE内存:3.5.360(截至今日的最新版本)
我想要提供的应用程序位于通过Active Directory帐户登录的专用应用程序池中.
我使用dotTrace Performance 4.5来分析.NET 3.5 C#Web应用程序.当我记录一个"用户请求"(页面加载)时,我看到11个线程具有大致相同的时序,7644毫秒.
Microsoft.VisualStudio.WebServer.WebServerApp.Main(String[])System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object) PerformWaitCallback(1094毫秒)>> 12%=ProcessRequest你能告诉我吗:
PerformWaitCallback?我正在尝试在本地计算机上配置.NET C#Web应用程序.为此,我在Visual Studio 2013中加载了解决方案,并从Visual Studio主菜单中选择了dotTrace - > Profile Startup Project.
这会激活dotTrace,但是当服务启动时,我不能使用任何dotTrace按钮,它们都会变灰.见下文:

我的应用程序在IIS Express下运行http://localhost:49824.我正在使用dotTrace 5.5.2和Visual Studio 2013.任何人都知道为什么我无法分析我的应用程序?
我们在生产服务器上的W3WP流程一直很高.它不会达到100%,但会跳到90%的公平位.为了帮助调查这一点,我使用JetBrains dotTrace描述了实时应用程序.
结果如预期.所有慢速方法都是查询数据库的NHibernate函数.我的问题是,这些慢速方法是否会对我们的Web服务器上的CPU产生影响,因为我们的数据库服务器位于单独的计算机上.当然,如果数据库服务器正在做一些工作,那么Web服务器jsut等待响应,CPU不应该上升?
如果是这种情况,我如何使用dotTrace(或其他工具,如果需要)来计算CPU的使用位置,而不是等待来自其他地方的响应的服务器?
dotTrace热点截图

您可以从屏幕截图中看到,大部分时间都花在等待外部HTTP请求完成上.但是,这些不应该影响我想到的Web服务器上的CPU使用率

[垃圾收集]在这张照片中意味着什么?和"20个电话"的事情?
我的意思是,我怎么能弄清楚为什么GC花了这么长时间?它收集了很多小物件吗?一个大的?关于如何优化这一点的任何提示?
有问题的代码是:
private void DeserializeFrom(SerializationInfo info)
{
Width = info.GetInt32("width");
Height = info.GetInt32("height");
var data = (List<byte>)info.GetValue("cells", typeof(List<byte>));
cells = new Cell[physicalSize.Width, physicalSize.Height];
int pos = 0;
for (int x = 0; x < physicalSize.Width; x++)
{
for (int y = 0; y < physicalSize.Height; y++)
{
cells[x, y] = new Cell();
if (x < Width && y < Height)
{
cells[x, y].HasCar = data[pos];
pos++;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
没什么太花哨的.我怀疑罪魁祸首是大List<byte>对象,但我认为收集一个单一的大对象应该是即时的(而不是收集一堆小对象).
从/sf/ask/19170091/,/sf/ask/10016191/和HTTPS ://stackoverflow.com/questions/180939/net-must-have-development-tools,我发现一些软件工具是多重推荐的,比如Reshaper,dotTrace和NDepend.
我使用Visual Studio 2010 Ultimate,它有一些功能,如代码覆盖率,分析和StyleCop等等,而且它非常昂贵.
作为VS 2010 Ultimate的用户,是否值得投资我提到的那些工具?或者,它们是否提供VS 2010 Ultimate已具有的类似功能?
我们目前正在尝试优化实体框架查询的性能.特别是,我们寻找降低CPU使用率的方法.
使用dotTrace,我们分析了执行不同查询时CPU时间最多的成本.请参阅下面的快照:

此快照来自一个相当简单的查询,但它仍然显示哪个是最耗时的操作:GetExecutionPlan().进一步深入研究,可以看出,ComputeHashValue()方法使用了很多时间,该方法以递归方式为表达式树中的所有节点调用.
这篇博文说明了这一点
实体框架将遍历表达式树中的节点并创建一个哈希,该哈希将成为用于将其置于查询缓存中的密钥.
因此,似乎哈希值仅用作查询缓存的键.由于我们在查询中使用IEnumerable.Contains(),因此EF不会对它们进行处理(请参阅此MSDN文章(第3.2和4.1章).因此,我们禁用了查询计划缓存,如下所示:
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var objectSet = objectContext.CreateObjectSet<Customer>();
objectSet.EnablePlanCaching = false;
// use objectSet for queries..
Run Code Online (Sandbox Code Playgroud)
我们希望不再调用ComputeHashValue().但是,dotTrace显示的调用树没有任何变化,性能与启用查询计划缓存的性能完全相同.
在禁用查询计划缓存时,是否还需要ComputeHashValue()?
对于我们更复杂的查询,对ComputeHashValue()的所有调用占用查询执行所需的整个CPU时间的70%,因此避免这些调用(如果不需要)将大大影响我们的性能.
使用dotTrace时,我必须选择一个分析模式和一个时间测量方法. 分析模式是:
和时间测量方法是:
跟踪和逐行不能使用线程时间测量.但这仍然让我有七种不同的组合尝试.我现在已经十几次阅读了这些关于dotTrace的帮助页面了,而且我仍然没有比我开始知道选择哪一个更有见识.
我正在开发一个WPF应用程序,它可以读取Word文档,提取所有段落和样式,然后遍历提取的内容以选择文档部分.我正在尝试优化这个过程.(目前完成需要一个多小时,因此我试图在给定的时间内对其进行分析,而不是直到完成.)
哪种性能分析和时间测量类型会给我最好的结果?或者,如果答案是"它取决于",那么它依赖于什么?给定的分析模式或时间测量方法的优缺点是什么?
我正在使用IntelliJ IDE进行Java应用程序开发。我想知道是否有一种方法可以从IntelliJ中计算出完成一个特定功能所花费的时间。任何链接或答案,如果可能的话,将受到高度赞赏。
谢谢
我在我的Web应用程序上使用DotTrace Performance(v 5.5.4)。我试图优化冷启动MVC 5应用程序后的页面加载时间。查看快照中的主线程,似乎大部分工作是在“本地或优化代码”中完成的。多数民众赞成似乎有点太笼统,并没有真正的帮助。这到底是什么意思,我该如何进一步深入研究?
注意:我在jetbrains论坛上找到了类似的帖子,但是那里似乎也没有任何解决方法。
dottrace ×10
profiling ×4
performance ×3
.net ×2
asp.net ×2
app-startup ×1
c# ×1
iis ×1
iis-7 ×1
java ×1
ndepend ×1
nhibernate ×1
optimization ×1
profile ×1
resharper ×1
wcf ×1