真正解决ASP.NET每一个页面首次访问超级慢的问题 (转载)
用过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位的系统,可能需要以管理员身份打开编辑器,再打开这个文件,否则无法保存的。
- <?xml version="1.0" encoding="utf-8"?>
- <configuration>
- <runtime>
- <generatePublisherEvidence enabled="false"/>
- </runtime>
- </configuration>
对"Network Service"帐号下运行的所有程序禁止证书检查
不会的话就忽略吧。
导入以下注册表内容,自己先另存为*.reg文件吧,如果会手工操作的话,就手工来吧。
- Windows Registry Editor Version 5.00
- [HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing]
- "State"=dword:00023e00
然后记得重启一下应用程序池(实在不知道,就重启IIS服务),再去看看你的网站,首次加载快吗?其它页面访问快吗?
忍受不了时,就再也不用忍受!
下面是专业的分析记录,看不懂就当没见过吧。。。
- 详细分析
- ==========
- 这个时候如果我们抓取一个hang dump的话,页面所对应的managed callstack往往如下,很明显它正在加载一个Assembly
- 0:022> !CLRStack
- OS Thread Id: 0xeb4 (22)
- Child-SP RetAddr Call Site
- 000000001af1c900 000007fef91747c3 System.Reflection.Assembly.InternalLoad(System.Reflection.AssemblyName, System.Security.Policy.Evidence,
- System.Threading.StackCrawlMark ByRef, Boolean)
- 000000001af1c990 000007ff0141f0f9 System.Reflection.Assembly.Load(System.Reflection.AssemblyName)
- 000000001af1c9d0 000007fef9fdd502 Microsoft.SharePoint.Portal.WebControls.StringResourceManager..cctor()
- 000000001af1db50 000007ff014135e2 Microsoft.SharePoint.Portal.WebControls.MySiteLinkUserControl.SetControl()
- 000000001af1dce0 000007fef398e04f Microsoft.SharePoint.Portal.WebControls.MySiteLinkUserControl.OnInit(System.EventArgs)
- 000000001af1de80 000007fef398f3af System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
- 000000001af1dee0 000007ff014133c8 System.Web.UI.Control.AddedControl(System.Web.UI.Control, Int32)
- 000000001af1df50 000007ff0134115e Microsoft.SharePoint.WebControls.DelegateControl.AddControlResilient(System.Web.UI.Control)
- 000000001af1dff0 000007fef398fb22 Microsoft.SharePoint.WebControls.DelegateControl.CreateChildControls()
- 000000001af1e170 000007ff01341024 System.Web.UI.Control.EnsureChildControls()
- 000000001af1e1d0 000007fef398e04f Microsoft.SharePoint.WebControls.DelegateControl.OnInit(System.EventArgs)
- 000000001af1e210 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
- 000000001af1e270 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
- 000000001af1e2d0 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
- 000000001af1e330 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
- 000000001af1e390 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
- 000000001af1e3f0 000007fef398a935 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)
- 000000001af1e450 000007fef398a1f0 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)
- 000000001af1e520 000007fef398a11b System.Web.UI.Page.ProcessRequest(Boolean, Boolean)
- 000000001af1e580 000007fef398a0b0 System.Web.UI.Page.ProcessRequest()
- 000000001af1e5e0 000007fef3991557 System.Web.UI.Page.ProcessRequest(System.Web.HttpContext)
- 000000001af1e640 000007fef395567b System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
- 000000001af1e6f0 000007fef39634b5 System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)
- 000000001af1e790 000007fef3954733 System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception)
- 000000001af1e840 000007fef3958a54 System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback,
- System.Object)
- 000000001af1e8a0 000007fef395863c System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest)
- 000000001af1e930 000007fef395726c System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest)
- 000000001af1e970 000007fef9fdd502 System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32)
- 其实它所要加载的Assembly名字如下
- Microsoft.SharePoint.Portal.intl
- 此线程所对应的native callstack如下
- 0:022> k20
- Child-SP RetAddr Call Site
- 00000000'1af1a208 000007fe'fdc610ac ntdll!ZwWaitForSingleObject+0xa
- 00000000'1af1a210 000007fe'f5dfa2fa KERNELBASE!WaitForSingleObjectEx+0x79 00000000'1af1a2b0 000007fe'f5df76fa cryptnet!CryptRetrieveObjectByUrlWithTimeout+0x263
- 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
- 00000000'1af1ad00 000007fe'f5df3810 cryptnet!FreshestCrlFromCrlGetTimeValidObject+0x61
- 00000000'1af1ad70 000007fe'f5df99fc cryptnet!CryptGetTimeValidObject+0xb0 00000000'1af1adf0 000007fe'f5df345d cryptnet!GetTimeValidCrl+0x4b7
- 00000000'1af1af30 000007fe'f5df3f82 cryptnet!GetBaseCrl+0x7d 00000000'1af1afc0 000007fe'f5df3d58 cryptnet!MicrosoftCertDllVerifyRevocation+0x238
- 00000000'1af1b110 000007fe'fdb157c7 cryptnet!CertDllVerifyRevocation+0x28
- 00000000'1af1b160 000007fe'fdb1552e crypt32!VerifyDefaultRevocation+0x398 00000000'1af1b250 000007fe'fdb15c09 crypt32!CertVerifyRevocation+0x144
- ...
- 00000000'1af1bcc0 000007fe'f9e46c27 mscorwks!PEFile::CheckSecurity+0x39b924
- 00000000'1af1bd50 000007fe'f9e5eb5d mscorwks!PEAssembly::DoLoadSignatureChecks+0x37
- 00000000'1af1bd90 000007fe'f9e52ff8 mscorwks!PEAssembly::PEAssembly+0x12d 00000000'1af1be00 000007fe'f9e40b9d mscorwks!PEAssembly::DoOpen+0x11c 00000000'1af1c130 000007fe'f9f24a3e mscorwks!PEAssembly::Open+0x71
- 从这些函数名我们知道它正在做一些证书检查之类的事情。而实际上它正在等待下面的这个线程。
- 0:036> kn
- # Child-SP RetAddr Call Site
- 00 00000000'2409e1c8 000007fe'fdc610ac ntdll!ZwWaitForSingleObject+0xa
- 01 00000000'2409e1d0 000007fe'f5d7f38e KERNELBASE!WaitForSingleObjectEx+0x79
- 02 00000000'2409e270 000007fe'f5d80a27 winhttp!IsWpadEnabledForConnectedNetworks+0x1f2
- 03 00000000'2409e340 000007fe'f5d806dc winhttp!ReadWinInetProxySettings+0x1c3
- 04 00000000'2409e3c0 000007fe'f5dfae42 winhttp!WinHttpGetIEProxyConfigForCurrentUser+0x28a
- 05 00000000'2409e510 000007fe'f5df9237 cryptnet!InetGetProxy+0x11e
- 06 00000000'2409e600 000007fe'f5df983d cryptnet!InetSendAuthenticatedRequestAndReceiveResponse+0x190
- 07 00000000'2409f770 000007fe'f5df9d9c cryptnet!InetSendReceiveUrlRequest+0x57e
- .....
- 0:036> .frame 7
- 07 00000000'2409f770 000007fe'f5df9d9c cryptnet!InetSendReceiveUrlRequest+0x57e [d:\w7rtm\ds\security\cryptoapi\pki\rpor\inetsp.cpp @ 2603]
- 0:036> dv
- hInetSession = 0x00000000'218211f0
- pwszUrl = 0x00000000'1f8abe50 "http://crl.microsoft.com/pki/crl/products/CSPCA.crl"
- dwRetrievalFlags = 1
- pCredentials = 0x00000000'00000000
- pcba = 0x00000000'2409fab0
- ppfnFreeObject = 0x00000000'2409fb38
- ppvFreeContext = 0x00000000'2409fb30
- pAuxInfo = 0x00000000'1f8abd78
- phInetRequest = 0x00000000'00000000
- 我们可以看到,当时我们抓取dump的时候它正在尝试连接http://crl.microsoft.com/pki/crl/products/CSPCA.crl
转载于:https://www.cnblogs.com/mrray/p/5552343.html
真正解决ASP.NET每一个页面首次访问超级慢的问题 (转载)相关推荐
- 真正解决ASP.NET每一个页面首次访问超级慢的问题
原文:http://www.afuhao.com/article_articleId-219.shtml 摘要:ASP.NET页面首次打开很慢,但别的页面如果没有访问过,去访问也会慢.你也许认为它是在 ...
- Asp.net中一个页面多个表单的解决方案
<form id="form1" runat="server"> <input name="TrueName" type= ...
- asp.net 调用html页面,ASP.NET中HTML页面的访问验证设置方法
可能有很多朋友和我一样不会留意到这样的问题,在ASP.NET中,使用其自身提供的访问验证功能(表单验证.Passport 验证.Windows 验证),并不会对静态文件(如 html.图像文件.文本文 ...
- 一个页面,WEB全功能
当鼠标在页面上往下滑动的时候,页面也一直向下,标签也顺带着全部向下滑动 以前浏览页面,主要是在PC上进行浏览,一个页面不适于太长,需要用户向下拖动: 当时的设计是,点击标签,点击不同的标签,跳转到不同 ...
- 解决go包管理代理网址无法访问:proxy.golang.org 换成goproxy.cn
解决方法: 换一个国内能访问的代理地址:https://goproxy.cn 执行命令: go env -w GOPROXY=https://goproxy.cn
- 页面应用访问统计 - GA [Google Analytics]
1.应用场景 用于页面应用访问统计, 包括多页面和单页面. 2.学习/操作 开发环境: Windows10 64位 专业版 laravel 5.8 / 6.x Google Analytics 百度统 ...
- asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)...
asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!) 原文:asp.net使用post方式action到另一个页面,在另一个页面接受form表单 ...
- ASP.NET查询页面设置form的action属性只弹出一个页面,并且每次将页面设置到最前...
背景 当数据量大.查询条件复杂,多样多的时候,我们可能需要单独做一个查询界面,当用户选择设置了相关的查询条件后,点击[查询]按钮,系统就弹出一个新的页面展示出根据条件查询出的数据集. 然后,用户每点[ ...
- asp关于从utf8页面到gb2312页面出现乱码得解决
(转载,原网址记不清楚了) 昨天做了两个asp页面,一个是utf-8得页面一个则是gb2312得页面. 于是发生了件怪事(主要是我第一次遇见得),单独打开这两个页面都不会出现问题, 但偏偏从utf8连 ...
最新文章
- bindservice启动服务
- java: BigDecimal 调用add后,求和结果没有变化
- 维护库存地点的装运点确认
- JAVA 15发布,越来越像C# ?9月排名,C#增幅狠甩JAVA
- 服务器推送_初探 Watermill 构建 Golang 事件驱动程序,SSE 进行 HTTP 服务器推送
- MFCk开发IM-msvcrt.lib 和 libcmtd.lib 冲突的解决方案
- 伪类如何动态在html设置样式,VUE项目中对伪类动态设置样式
- PhotoShop中批量导出图片
- Chaos 发布流体模拟王者 Phoenix 的5.0版本!
- 【网络协议】IPV4协议介绍
- 无线网络的暴力破解密码
- 企业级监控ZABBIX
- 无人车传感器 GPS 深入剖析
- ftp服务器下载,细数五款好用的ftp服务器下载软件
- 软银没有中国,孙正义失去一切
- 学51单片机,总是感觉学不会该怎么办呢?
- 使用Python预测黄金AU9999收盘价
- CentOS离线安装Tomcat
- 计算机管理员无法关闭防火墙,Win10关闭防火墙提示:出于安全原因 某些设置由系统管理员管理的解决方法...
- 计算机学院年会,我校计算机学院应邀出席全国职业院校计算机系主任年会并作报告...
热门文章
- JAVA 搭建基于SPRINGBOOT的SSM(SPRING + SPRINGMVC + MYBATIS)的MAVEN项目
- django之分页、cookie装饰器
- error C2065: “cout”: 未声明的标识符
- js中常用的日期处理函数
- html语言中%3c%%%3e中语言,[工学]C语言程序设计习题解答.doc
- mysql如何抛出错误信息_如何捕获并重新抛出MySQL中的所有错误
- scrum回顾_[PM]敏捷开发之Scrum总结
- win10安装python3_win10 64位肿么安装python3.x
- mysql left a 10_MySQL基础总结,认真看完这篇就够了!!!
- 理解 Python 中的异步编程