原文:http://www.afuhao.com/article_articleId-219.shtml
摘要:ASP.NET页面首次打开很慢,但别的页面如果没有访问过,去访问也会慢。你也许认为它是在编译ASPX,或者加载一些东西。不过我发现不是这样的。

用过ASP.NET的人都知道吧,页面首次打开很慢。

本来网站第一次启动就慢,但别的页面如果没有访问过,去访问也会慢。

好吧,你也许认为它是在编译ASPX,或者加载一些东西。

我也这样认为过。

不过我发现不是这样的。

1.bin目录里面你放多少它加载多少,如果放一些无效的DLL,比如在32位下面放一些纯64位的DLL,就会直接报错;

2.aspx页面解析非常快,那么转成CS也是一瞬间,编译更不用说,不应该是卡上2-5秒,1秒是可以接受的;

今天搜索了一下,原来是这样的:

.net程序第一次运行速度慢的问题原因是第一次运行需要验证数字签名。

当程序里面需要调用到一些 Authenticode Signed的.NET Assembly的时候,它需要连接到外网来验证数字证书。当服务器是无法连接到外网时,这个校验证书的过程需要等到timeout之后才会结束。

那么要做的就是不让它干这些坏事,总之我从来都不觉得它会老老实实的给你服务。

禁止证书的验证过程:
1、在下面aspnet.config文件中加入下面内容: 
    32位系统:C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet.config
    64位系统:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet.config

有4.0,甚至4.5的自己多改几个地方,如果是64位的系统,可能需要以管理员身份打开编辑器,再打开这个文件,否则无法保存的。

[xhtml] 查看源代码复制打印
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3. <runtime>
  4. <generatePublisherEvidence enabled="false"/>
  5. </runtime>
  6. </configuration>

对"Network Service"帐号下运行的所有程序禁止证书检查

不会的话就忽略吧。

导入以下注册表内容,自己先另存为*.reg文件吧,如果会手工操作的话,就手工来吧。

[txt] 查看源代码复制打印
  1. Windows Registry Editor Version 5.00
  2. [HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing]
  3. "State"=dword:00023e00

然后记得重启一下应用程序池(实在不知道,就重启IIS服务),再去看看你的网站,首次加载快吗?其它页面访问快吗?

忍受不了时,就再也不用忍受!

下面是专业的分析记录,看不懂就当没见过吧。。。

[txt] 查看源代码复制打印
  1. 详细分析
  2. ==========
  3. 这个时候如果我们抓取一个hang dump的话,页面所对应的managed callstack往往如下,很明显它正在加载一个Assembly
  4. 0:022> !CLRStack
  5. OS Thread Id: 0xeb4 (22)
  6. Child-SP RetAddr Call Site
  7. 000000001af1c900 000007fef91747c3 System.Reflection.Assembly.InternalLoad(System.Reflection.AssemblyName, System.Security.Policy.Evidence,
  8. System.Threading.StackCrawlMark ByRef, Boolean)
  9. 000000001af1c990 000007ff0141f0f9 System.Reflection.Assembly.Load(System.Reflection.AssemblyName)
  10. 000000001af1c9d0 000007fef9fdd502 Microsoft.SharePoint.Portal.WebControls.StringResourceManager..cctor()
  11. 000000001af1db50 000007ff014135e2 Microsoft.SharePoint.Portal.WebControls.MySiteLinkUserControl.SetControl()
  12. 000000001af1dce0 000007fef398e04f Microsoft.SharePoint.Portal.WebControls.MySiteLinkUserControl.OnInit(System.EventArgs)
  13. 000000001af1de80 000007fef398f3af System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
  14. 000000001af1dee0 000007ff014133c8 System.Web.UI.Control.AddedControl(System.Web.UI.Control, Int32)
  15. 000000001af1df50 000007ff0134115e Microsoft.SharePoint.WebControls.DelegateControl.AddControlResilient(System.Web.UI.Control)
  16. 000000001af1dff0 000007fef398fb22 Microsoft.SharePoint.WebControls.DelegateControl.CreateChildControls()
  17. 000000001af1e170 000007ff01341024 System.Web.UI.Control.EnsureChildControls()
  18. 000000001af1e1d0 000007fef398e04f Microsoft.SharePoint.WebControls.DelegateControl.OnInit(System.EventArgs)
  19. 000000001af1e210 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
  20. 000000001af1e270 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
  21. 000000001af1e2d0 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
  22. 000000001af1e330 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
  23. 000000001af1e390 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
  24. 000000001af1e3f0 000007fef398a935 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
  25. 000000001af1e450 000007fef398a1f0 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)
  26. 000000001af1e520 000007fef398a11b System.Web.UI.Page.ProcessRequest(Boolean, Boolean)
  27. 000000001af1e580 000007fef398a0b0 System.Web.UI.Page.ProcessRequest()
  28. 000000001af1e5e0 000007fef3991557 System.Web.UI.Page.ProcessRequest(System.Web.HttpContext)
  29. 000000001af1e640 000007fef395567b System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
  30. 000000001af1e6f0 000007fef39634b5 System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)
  31. 000000001af1e790 000007fef3954733 System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception)
  32. 000000001af1e840 000007fef3958a54 System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback,
  33. System.Object)
  34. 000000001af1e8a0 000007fef395863c System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest)
  35. 000000001af1e930 000007fef395726c System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest)
  36. 000000001af1e970 000007fef9fdd502 System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32)
  37. 其实它所要加载的Assembly名字如下
  38. Microsoft.SharePoint.Portal.intl
  39. 此线程所对应的native callstack如下
  40. 0:022> k20
  41. Child-SP RetAddr Call Site
  42. 00000000'1af1a208 000007fe'fdc610ac ntdll!ZwWaitForSingleObject+0xa
  43. 00000000'1af1a210 000007fe'f5dfa2fa KERNELBASE!WaitForSingleObjectEx+0x79 00000000'1af1a2b0 000007fe'f5df76fa cryptnet!CryptRetrieveObjectByUrlWithTimeout+0x263
  44. 00000000'1af1a5b0 000007fe'f5df4646 cryptnet!CryptRetrieveObjectByUrlW+0x20f 00000000'1af1a7a0 000007fe'f5df9c34 cryptnet!RetrieveObjectByUrlValidForSubject+0x162 00000000'1af1a8d0 000007fe'f5df4243 cryptnet!RetrieveTimeValidObjectByUrl+0x2de 00000000'1af1a9c0 000007fe'f5df3c72 cryptnet!CTVOAgent::GetTimeValidObjectByUrl+0x2e3 00000000'1af1ab20 000007fe'f5df38ad cryptnet!CTVOAgent::GetTimeValidObject+0x7cf
  45. 00000000'1af1ad00 000007fe'f5df3810 cryptnet!FreshestCrlFromCrlGetTimeValidObject+0x61
  46. 00000000'1af1ad70 000007fe'f5df99fc cryptnet!CryptGetTimeValidObject+0xb0 00000000'1af1adf0 000007fe'f5df345d cryptnet!GetTimeValidCrl+0x4b7
  47. 00000000'1af1af30 000007fe'f5df3f82 cryptnet!GetBaseCrl+0x7d 00000000'1af1afc0 000007fe'f5df3d58 cryptnet!MicrosoftCertDllVerifyRevocation+0x238
  48. 00000000'1af1b110 000007fe'fdb157c7 cryptnet!CertDllVerifyRevocation+0x28
  49. 00000000'1af1b160 000007fe'fdb1552e crypt32!VerifyDefaultRevocation+0x398 00000000'1af1b250 000007fe'fdb15c09 crypt32!CertVerifyRevocation+0x144
  50. ...
  51. 00000000'1af1bcc0 000007fe'f9e46c27 mscorwks!PEFile::CheckSecurity+0x39b924
  52. 00000000'1af1bd50 000007fe'f9e5eb5d mscorwks!PEAssembly::DoLoadSignatureChecks+0x37
  53. 00000000'1af1bd90 000007fe'f9e52ff8 mscorwks!PEAssembly::PEAssembly+0x12d 00000000'1af1be00 000007fe'f9e40b9d mscorwks!PEAssembly::DoOpen+0x11c 00000000'1af1c130 000007fe'f9f24a3e mscorwks!PEAssembly::Open+0x71
  54. 从这些函数名我们知道它正在做一些证书检查之类的事情。而实际上它正在等待下面的这个线程。
  55. 0:036> kn
  56. # Child-SP RetAddr Call Site
  57. 00 00000000'2409e1c8 000007fe'fdc610ac ntdll!ZwWaitForSingleObject+0xa
  58. 01 00000000'2409e1d0 000007fe'f5d7f38e KERNELBASE!WaitForSingleObjectEx+0x79
  59. 02 00000000'2409e270 000007fe'f5d80a27 winhttp!IsWpadEnabledForConnectedNetworks+0x1f2
  60. 03 00000000'2409e340 000007fe'f5d806dc winhttp!ReadWinInetProxySettings+0x1c3
  61. 04 00000000'2409e3c0 000007fe'f5dfae42 winhttp!WinHttpGetIEProxyConfigForCurrentUser+0x28a
  62. 05 00000000'2409e510 000007fe'f5df9237 cryptnet!InetGetProxy+0x11e
  63. 06 00000000'2409e600 000007fe'f5df983d cryptnet!InetSendAuthenticatedRequestAndReceiveResponse+0x190
  64. 07 00000000'2409f770 000007fe'f5df9d9c cryptnet!InetSendReceiveUrlRequest+0x57e
  65. .....
  66. 0:036> .frame 7
  67. 07 00000000'2409f770 000007fe'f5df9d9c cryptnet!InetSendReceiveUrlRequest+0x57e [d:\w7rtm\ds\security\cryptoapi\pki\rpor\inetsp.cpp @ 2603]
  68. 0:036> dv
  69. hInetSession = 0x00000000'218211f0
  70. pwszUrl = 0x00000000'1f8abe50 "http://crl.microsoft.com/pki/crl/products/CSPCA.crl"
  71. dwRetrievalFlags = 1
  72. pCredentials = 0x00000000'00000000
  73. pcba = 0x00000000'2409fab0
  74. ppfnFreeObject = 0x00000000'2409fb38
  75. ppvFreeContext = 0x00000000'2409fb30
  76. pAuxInfo = 0x00000000'1f8abd78
  77. phInetRequest = 0x00000000'00000000
  78. 我们可以看到,当时我们抓取dump的时候它正在尝试连接http://crl.microsoft.com/pki/crl/products/CSPCA.crl

转载于:https://www.cnblogs.com/mrray/p/5552343.html

真正解决ASP.NET每一个页面首次访问超级慢的问题 (转载)相关推荐

  1. 真正解决ASP.NET每一个页面首次访问超级慢的问题

    原文:http://www.afuhao.com/article_articleId-219.shtml 摘要:ASP.NET页面首次打开很慢,但别的页面如果没有访问过,去访问也会慢.你也许认为它是在 ...

  2. Asp.net中一个页面多个表单的解决方案

    <form id="form1" runat="server"> <input name="TrueName" type= ...

  3. asp.net 调用html页面,ASP.NET中HTML页面的访问验证设置方法

    可能有很多朋友和我一样不会留意到这样的问题,在ASP.NET中,使用其自身提供的访问验证功能(表单验证.Passport 验证.Windows 验证),并不会对静态文件(如 html.图像文件.文本文 ...

  4. 一个页面,WEB全功能

    当鼠标在页面上往下滑动的时候,页面也一直向下,标签也顺带着全部向下滑动 以前浏览页面,主要是在PC上进行浏览,一个页面不适于太长,需要用户向下拖动: 当时的设计是,点击标签,点击不同的标签,跳转到不同 ...

  5. 解决go包管理代理网址无法访问:proxy.golang.org 换成goproxy.cn

    解决方法: 换一个国内能访问的代理地址:https://goproxy.cn 执行命令: go env -w GOPROXY=https://goproxy.cn

  6. 页面应用访问统计 - GA [Google Analytics]

    1.应用场景 用于页面应用访问统计, 包括多页面和单页面. 2.学习/操作 开发环境: Windows10 64位 专业版 laravel 5.8 / 6.x Google Analytics 百度统 ...

  7. asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)...

    asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!) 原文:asp.net使用post方式action到另一个页面,在另一个页面接受form表单 ...

  8. ASP.NET查询页面设置form的action属性只弹出一个页面,并且每次将页面设置到最前...

    背景 当数据量大.查询条件复杂,多样多的时候,我们可能需要单独做一个查询界面,当用户选择设置了相关的查询条件后,点击[查询]按钮,系统就弹出一个新的页面展示出根据条件查询出的数据集. 然后,用户每点[ ...

  9. asp关于从utf8页面到gb2312页面出现乱码得解决

    (转载,原网址记不清楚了) 昨天做了两个asp页面,一个是utf-8得页面一个则是gb2312得页面. 于是发生了件怪事(主要是我第一次遇见得),单独打开这两个页面都不会出现问题, 但偏偏从utf8连 ...

最新文章

  1. bindservice启动服务
  2. java: BigDecimal 调用add后,求和结果没有变化
  3. 维护库存地点的装运点确认
  4. JAVA 15发布,越来越像C# ?9月排名,C#增幅狠甩JAVA
  5. 服务器推送_初探 Watermill 构建 Golang 事件驱动程序,SSE 进行 HTTP 服务器推送
  6. MFCk开发IM-msvcrt.lib 和 libcmtd.lib 冲突的解决方案
  7. 伪类如何动态在html设置样式,VUE项目中对伪类动态设置样式
  8. PhotoShop中批量导出图片
  9. Chaos 发布流体模拟王者 Phoenix 的5.0版本!
  10. 【网络协议】IPV4协议介绍
  11. 无线网络的暴力破解密码
  12. 企业级监控ZABBIX
  13. 无人车传感器 GPS 深入剖析
  14. ftp服务器下载,细数五款好用的ftp服务器下载软件
  15. 软银没有中国,孙正义失去一切
  16. 学51单片机,总是感觉学不会该怎么办呢?
  17. 使用Python预测黄金AU9999收盘价
  18. CentOS离线安装Tomcat
  19. 计算机管理员无法关闭防火墙,Win10关闭防火墙提示:出于安全原因 某些设置由系统管理员管理的解决方法...
  20. 计算机学院年会,我校计算机学院应邀出席全国职业院校计算机系主任年会并作报告...

热门文章

  1. JAVA 搭建基于SPRINGBOOT的SSM(SPRING + SPRINGMVC + MYBATIS)的MAVEN项目
  2. django之分页、cookie装饰器
  3. error C2065: “cout”: 未声明的标识符
  4. js中常用的日期处理函数
  5. html语言中%3c%%%3e中语言,[工学]C语言程序设计习题解答.doc
  6. mysql如何抛出错误信息_如何捕获并重新抛出MySQL中的所有错误
  7. scrum回顾_[PM]敏捷开发之Scrum总结
  8. win10安装python3_win10 64位肿么安装python3.x
  9. mysql left a 10_MySQL基础总结,认真看完这篇就够了!!!
  10. 理解 Python 中的异步编程