c# Web应用调优:PerformWaitCallback



我正在使用dotTrace Performance 4.5来分析一个。net 3.5 c# web应用程序。当我记录一个"用户请求"(页面加载)时,我看到11个线程具有大致相同的时间,7644毫秒。

  • 大多数线程描述只包含: 100%[本机或优化代码]- 7644 ms
  • 有人说: 100% Microsoft.VisualStudio.WebServer.WebServerApp.Main(String[])
  • 最后一个读取:
    • 86% System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object)
    • 14% PerformWaitCallback (1094 ms)>> 12% = ProcessRequest

能告诉我吗?

    为什么有这么多线程?(图片资源,AJAX, JavaScript) PerformWaitCallback是什么?
  • 为什么只有1094毫秒的工作需要7644毫秒?

为什么有这么多线程?(图片资源,AJAX, JavaScript)

web服务器创建一个线程池来管理传入的请求,池中有许多线程。

什么是PerformWaitCallback?

不确定,但看起来像是等待线程池线程完成任务的代码。

为什么只有1094毫秒的工作需要7644毫秒?

看起来分析器正在计算一些线程等待新工作所花费的时间。我没有使用dotTrace,但是大多数分析器都有一种方法来配置它们,这样它们就可以识别线程何时在等待与工作——基于你发布的信息,我怀疑分析器配置得不太正确。

关于PerformWaitCallback,这是参考源必须说的:

回叫助手。该函数将请求分派给user-callbacks。工作项是从每个应用域中获取的在循环中排队,直到没有更多的工作或量子有更多的工作过期了。执行量刑是为了保持公平appdomains。

你可以在这里看到完整的代码。

顺便说一句,我不确定你是否会在。net 4.5中看到这一点——还是从参考源代码(找不到在线版本,你必须从http://referencesource.microsoft.com/):

下载)。
//This type is necessary because VS 2010's debugger looks for a method named 
///_ThreadPoolWaitCallbacck.PerformWaitCallback 
//on the stack to determine if a thread is a ThreadPool thread or not.  
//We have a better way to do this for .NET 4.5, but
//still need to maintain compatibility with VS 2010.  
//When compat with VS 2010 is no longer an issue, this type may be removed.
internal static class _ThreadPoolWaitCallback
{ 
    [System.Security.SecurityCritical]
    static internal bool PerformWaitCallback() 
    { 
        return ThreadPoolWorkQueue.Dispatch();
    } 
}

相关内容

  • 没有找到相关文章

最新更新