问题现象

访问asp.net web项目的时候,第一次访问比较慢,当闲置一段时间后,再次访问还是会非常慢。

问题原因

这是IIS回收造成的,再次访问的时候会初始化操作,初始化需要耗费时间,所以访问会比较慢,第二次访问的时候不需要初始化操作,因此变快了。

解决办法

IIS应用初始化会在网站第一次创建后或者对应网站的应用程序池回收后,自动开启新程序池,并启动网站初始化,模拟一次正常请求,使网站一直处于在线状态。

修改IIS中的配置
1.修改启用应用程序池(AlwaysRunning):保证应用程序池在第一次创建或者被回收后,能自动再次重启运行。


2.修改闲置超时1740分钟:长时间没有请求释放资源,可以不用修改。


3.修改启用网站程序预加载(true):保证程序池在启动过后,网站能响应预加载动作。


我看有些博客会将进程模型/闲置超时设置为0或者很长,觉得不太好。闲置超时是指如果你的应用程序未处理请求也未接受请求,则进入闲置状态,这个状态可以保持的时间,超过这个时间,则该进程将会从内存中删除并释放所有内容。如果设置为0,则不会闲置一直持续不好,如果代码中有内存泄漏,则会一直持续,完全占用服务器。设置时间过长,长时间没有请求,还占用这内存,有点浪费。按照以上修改之后,基本上都会秒启动。这样的修改同样也适用于MVC,web api等IIS项目

IIS8以前的项目的第一次访问ASP.NET应用会很慢

以前的程序有可能有这个问题,现在的基本上没有了,因为从Windows 8开始,不再要求必须对CSP进行签名。
Microsoft Authenticode:Microsoft Authenticode旨在帮助用户确保谁实际创建了他们正在运行的代码,特别是对于在Internet上下载或运行的代码,并验证代码在发布后未被更改或篡改。例如,经过数字签名,恶意篡改然后在线重新分发的程序将在运行之前向用户显示警告。

问题现象

ASP.NET页面第一次访问的时候很慢,时间可以持续几十秒到几分钟

问题原因

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

解决办法

这个解决方案是由微软APAC技术支持中心 Internet Developer Support Team提供 https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/04/24/asp-net/)
请同时在以下两个aspnet.config文件中加入以下内容。
C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet.config
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet.config

<?xml version="1.0" encoding="utf-8"?>

<configuration>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>

修改以下注册表键值并重起IIS服务,打开注册表regedit,找到以下地址,修改State为00023e00,原先的是00023c00
[HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing]
"State"=dword:00023e00
然后记得重启一下应用程序池

ASP.NET第一次访问慢的解决方法(MVC,Web Api)的更多相关文章

  1. 解决ASP.Net第一次访问慢的处理(IIS8)

    本篇经验以IIS8,Windows Server 2012R2做为案例. IIS8 运行在 Windows Server 2012 and Windows 8 版本以上的平台上. IIS中应用程序池和 ...

  2. ASP.NET对路径"C:/......."的访问被拒绝 解决方法小结 [转载]

    问题: 异常详细信息: System.UnauthorizedAccessException: 对路径“C:/Supermarket/output.pdf”的访问被拒绝. 解决方法: 一.在IIS中的 ...

  3. 经历:asp.net oracle 部署问题以及解决方法

    原文:[原创]经历:asp.net oracle 部署问题以及解决方法 精简的美丽...... 一.环境    开发环境        win7 64bit         Vs2010       ...

  4. C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法

    最近在做项目的时候需要操作ftp进行文件的上传下载,但在调用using (var response = (FtpWebResponse)FtpWebRequest.GetResponse())的时候总 ...

  5. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  6. ASP.NET MVC Web API Post FromBody(Web API 如何正确 Post)

    问题场景: ASP.NET MVC Web API 定义 Post 方法,HttpClient 使用 JsonConvert.SerializeObject 传参进行调用,比如 Web Api 中定义 ...

  7. 实战 ASP.NET MVC Web API

    实战 ASP.NET MVC Web API Web API 框架基于 ASP.NET MVC 框架开发,是一个面向 Http 协议的通信框架.相对于 WCF 而言,Web API 只面向于 Http ...

  8. [译]ABP框架使用AngularJs,ASP.NET MVC,Web API和EntityFramework构建N层架构的SPA应用程序

    本文转自:http://www.skcode.cn/archives/281 本文演示ABP框架如何使用AngularJs,ASP.NET MVC,Web API 和EntityFramework构建 ...

  9. 【转载】ASP.NET MVC Web API 学习笔记---联系人增删改查

    本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查.目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的.下面我们通过创建一个简单的Web API来管理联系 ...

随机推荐

  1. @RequestBody标记的形参,与APP接口不能直接用

    用ajax请求传JSON串,在服务端形参用@RequestBody标记可以直接转为对应的对象: 在APP调用该接口时,服务端用@RequestBody标记无法转为对应对象,将形参改为String类型, ...

  2. CheckBox IsHitTestVisible

    <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></Colu ...

  3. C++中类的继承与Java中的不同,C++的派生类不能继承父类的构造函数和析构函数(不一定正确)

    http://blog.csdn.net/guodongxiaren/article/details/24885023

  4. Win8Metro(C#)数字图像处理--2.33图像非线性变换

    原文:Win8Metro(C#)数字图像处理--2.33图像非线性变换  [函数名称] 图像非线性变换函数NonlinearTransformProcess(WriteableBitmap src ...

  5. MASMPlus汇编之简单窗体

    .386 .model flat,stdcall option casemap:none ;include 定义 include   windows.inc include   gdi32.inc i ...

  6. mysql8解压版安装

    1.下载 下载mysql8 2.安装 ① 解压到需要安装的目录,然后新建一个my.ini(位于解压目录下,与bin目录在同一个目录下) # For advice on how to change se ...

  7. xe5 firemonkey关闭应用程序

    在FMX中,由Activity替代了Form的概念,虽然TForm类仍然存在,但MainForm通过关闭函数无法结束程序,使用Application.Terminate均无效,调整为: uses   ...

  8. QThread的源码(直接搜索"thread.cpp"即可,或者在github里搜)

    void QThread::run() { (void) exec(); } int QThread::exec() { Q_D(QThread); QMutexLocker locker(& ...

  9. idea 导入maven项目

    1.import project 2.选择maven项目 3.选择第二个external moudle,选择maven, 4.点击next,一次点击1,2,3,4 5.设置maven环境 6.点击ok ...

  10. jquery事件和动画操作集锦

    一,事件 1,加载事件 1 2 3 4 5 6 $(document).ready(function(){   //todo }); //dom准备就绪后执行ready里面的函数,此时dom对应的相关 ...