首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何阻止ASP.NET在第一次加载时从bin加载所有程序集

在ASP.NET中,第一次加载时从bin文件夹加载所有程序集可能会导致性能下降。为了阻止这种情况,可以采取以下几种方法:

  1. 使用按需编译(On-Demand Compilation):按需编译仅在请求相关页面时编译相应的程序集,而不是一次性加载所有程序集。这可以通过在web.config文件中添加以下配置来实现:
代码语言:xml<configuration>
复制
 <system.web>
    <compilation debug="false" batch="false" />
  </system.web>
</configuration>
  1. 使用预编译(Precompilation):预编译是在部署应用程序之前将所有源代码文件编译成程序集,并将这些程序集放置在bin文件夹中。这样,在运行时,服务器只需加载已编译的程序集,而不需要重新编译源代码。要使用预编译,请在Visual Studio中发布应用程序,然后选择“预编译”选项。
  2. 使用动态编译(Dynamic Compilation):动态编译允许在运行时编译源代码文件,而无需将它们放置在bin文件夹中。这可以通过在web.config文件中添加以下配置来实现:
代码语言:xml<configuration>
复制
 <system.web>
    <compilation debug="false" />
  </system.web>
</configuration>
  1. 使用自定义编译提供程序(Custom Compilation Provider):自定义编译提供程序允许您指定只编译所需的程序集,从而避免加载不需要的程序集。要实现这一点,需要创建一个实现System.Web.Compilation.CompilationProvider抽象类的自定义编译提供程序,并将其注册到web.config文件中。

通过使用上述方法之一,可以有效地阻止ASP.NET在第一次加载时从bin文件夹加载所有程序集,从而提高应用程序的性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

微信小程序文章列表进入详情页如何加载打开详情页

写「一个程序手册」的接口,列表页的时候就把文章的所有数据都加载了,所以文章列表进入详情页的时候,其实数据都已经有了,那么我们是否做到不请求接口直接打开详情页呢?...其实是可以的,微信小程序路由提供的 getCurrentPages() 函数,可以获取当前页面栈的实例。...这个函数提供的页面栈以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面,所以倒数第二个元素就是上一页,我们可以使用这个函数实现无加载打开详情页,具体代码: const loadArticle...articles[0]; } } if(article){ this.setData({ article: article }) }else{ // 使用 API 远程加载文章详情...} } 体验Demo,请扫描一个程序手册,看看列表页进入详情页是不是很快:

36310

如果有大型 Web 应用程序,可考虑执行预批编译

每当发生对目录的第一次请求都会执行批编译。如果目录中的页面没有被分析并编译,此功能会成批分析并编译目录中的所有页面,以便更好地利用磁盘和内存。...此功能带给 ASP.NET 性能上的好处,因为它将许多页面编译为单个程序加载程序访问一页比每页加载新的程序要快。...为此,只需应用程序激活之前向它请求一个页面,无论哪页均可。然后,当用户首次访问您的站点,页面及其程序将已被编译。 没有简单的机制可以知道批编译何时发生。...还应尽量避免更改应用程序的 /bin 目录中的程序。更改页面会导致重新分析和编译该页,而替换 /bin 目录中的程序则会导致完全重新批编译该目录。...包含许多页面的大规模站点上,更好的办法可能是根据计划替换页面或程序的频繁程度来设计不同的目录结构。不常更改的页面可以存储同一目录中并在特定的时间进行预批编译。

58030
  • Shadow Copying导致ASP.NET应用启动很慢的解决办法

    因为启动应用程序时,CLR会首先创建应用程序域,然后应用程序域中加载程序并将其锁定。因此卸载程序之前是无法更新文件的。而卸载程序的唯一办法就是卸载加载程序的应用程序域。...到这里,你可能会好奇,为什么开发ASP.NET网站,我们却可以持续编译项目,而不会报这个提示呢?毕竟我们是编译目录起的站点啊,而且我们每次编译会更新程序的啊?!!!...ASP.NET应用程序启动,它会将应用程序路径中的程序文件复制到另外一个路径,然后另外一个路径加载程序并锁定。这样原来路径的程序文件就不会锁定,从而可以更新。...The disadvantage of Shadow Copying 当ASP.NET 应用程序有很多资源和程序,它的启动将会耗时很长,而这也正是由于Shadow Copying导致的。...第二种就是手动指定CLR的应用程序基础子目录,以便在加载程序进行搜索:

    89010

    Debugging into .NET Core源代码的两种方式

    的确,.NET Core和ASP.NET Core的源代码,现在已经Github上进行了代码托管;但不管是Github上在线阅读或是将源代码Clone到本地阅读,都比较有局限性,我最想要的还是能通过调试的方法...二、符号服务器 以前微软给我们调试.NET程序的方法,通常是Visual Studio加入符号服务器,来调试.NET托管程序。我们这次使用同样的方法,来完成这个调试源代码的任务。   ...现在就可以进行单步调试进.NET Core的源代码中了,只是第一次DEBUG加载的时候,会非常的慢,符号服务器在国外嘛,真的是比较慢,而且不会一次性全部下载并加载进来,可能在调试到某些断点,还要进行符号文件的下载...当然这里要注意,VS2015里创建项目模板可能会有版本问题,SDK使用的是1.0.0-preview2-003131版本,还有project.json里的程序版本也要与源代码提供的版本保持一致!...当然还是会出现一些小问题,比如项目编译时会找不到AspNetCore项目编译出来的DLL文件,这是因为如果Clone下来的源代码与你的项目不在一个目录下的话,会导致找不到编译出来的程序,解决方法也很简单

    2K30

    .NET工作准备--04ASP.NET

    是一个宿主CLR上的ISAPI过滤器程序;ISAPI->ASP.NET->托管代码机制很复杂,简要说明: asp.net初始运行,加载CLR; iis接受一个http请求,并且判断出该请求应该被绑定到...处理; 当网站文件动态更新,将重新加载该应用程序域; *常见的httpCode有哪些?...通常情况下,一旦某个请求对应到一个ASP.NET页面,一个直接或者间接继承自System.Web.UI.Page类型的对象就会初 始化,并且开始执行页面生存周期中的所有步骤。...两次ProcessPostData均是必须的: 第一次:保证了页面在被加载之前,所有的数据页面上被读入,这样页面加载就可以访问所有的数据。...详细机制: 客户申请一个新的带有ViewState字段的页面,第一次申请ViewState字段内数据为空; 客户提交表单,这是ViewState字段作为表单的一部分被提交,当然这时也为空; 服务器表单中读取

    2K50

    如何ASP.NET MVC 中集成 AngularJS(2)

    如何ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩、应用程序版本自动刷新和工程构建等内容。...这个问题是以如何使用 AngularJS 客户端 JavaScript 渲染服务器端的 ASP.NET 包开始的?...开始的时候,我 _Layout.cshtml 母版页的顶部编写了一些服务器端代码。我所做的头两件事情就是让程序信息类中获取应用的序列号,应用程序设置中获取检索的基本 URL。...后来这个 JSON 被添加到 AngularJS。有一个 JSON 集合中的包的信息是,允许客户端 AngularJS 应用程序加载服务器端捆绑的最初的方法。...事实证明,需求功能将会加载任何能够更好执行捆绑加载的路径。 当我第一次使用 RequireJS 的路径来下载捆绑,我已经完成了 RequireJS 和它的所有配置。

    8.3K100

    10个小技巧助您写出高性能的ASP.NET Core代码

    Wait 和 Task.Result AggregateException中包含所有类型的异常,并在在执行异常处理增加复杂性。...众所周知,大多数应用程序都使用某种数据库,每次数据库获取数据,都会影响应用程序的性能。如果数据库加载缓慢,则整个应用程序将缓慢运行。...如果您正在使用ASP.NET Core MVC创建网站,下面是一些提示: 捆绑和小型化 使用捆绑和小型化可以减少服务器请求次数。尝试一次加载所有客户端资源,如样式、js/css。...使用 CDN 如果您只有几个样式和JS文件,那么可以您的服务器加载。对于较大的静态文件,请尝试使用CDN。CDN通常可以多个位置上使用,并且文件是本地服务器提供的。...本地服务器加载文件可以提高网站性能。 最后 今天,我们学习了如何提升ASP.NET Core 应用程序的性能。非常希望这篇文章对你有所帮助,如果您有任何问题或建议,可以博客下面进行留言或者点赞!

    4.5K31

    Microsoft Graph 的 .NET 6 之旅

    第 1 阶段,我们有 ASP.NET Web 服务器程序和面向 .NET Framework(黄色)的所有库。...ASP.NET 程序应该是 Web 服务器的非常薄的存根,主机中抽象出应用程序。此 ASP.NET 程序应特定于主机,并引用实现各个组件(如控制器、模型、数据库访问等)的下游库。...,允许您加载和使用某些 .NET Framework 程序。...目前,我们仍然将一个控制台应用程序作为 .NET Framework 运行,并使用兼容性填充程序服务中加载一个 .NET Framework 程序。...多年来,我们最终整个代码库中都有不同的点,对传入请求的编码方式进行了严格的假设。当我们 ASP.NET 转移到 ASP.NET Core,许多这些假设都被违反了,导致许多问题和边缘情况。

    1.2K10

    简析 .NET Core 构成体系

    前文介绍了.NET Core 整个.NET 平台所处的地位,以及与.NET Framework的关系(原文链接),本文将详细介绍.NET Core 框架的构成和各模块主要功能,以及如何实现跨平台。...CoreCLR & CoreRT CoreCLR 和 CoreRT 都是.NET Core的运行时(Runtime), 它们提供了与.NET Framework CLR 类似的核心功能(内存管理、程序加载...AOT的优化带来不少好处: 编译后生成一个单文件,包含所有的依赖,包括 CoreRT,无需安装Framework 启动是机器码,不需要生成机器码,也不要加载JIT编译器 可以使用其他优化编译器,包括...如果使用JIT编译器部署程序时只需要将程序打包为IL的assemblies,方法第一次执行前编译器将IL编译为目标机机器码(Native code),而AOT编译会在编译将源代码直接编译为目标机机器码...ASP.NET Core 则以控制台应用程序驱动其托管环境 Kestrel Server 以支持 ASP.NET Core 程序的运行。

    1.1K20

    程序员级别鉴定书(.NET面试问答集锦)

    如果不打算重新编译ASP.NE应用程序,应该怎么做? 简述任意客户端请求路由到ASP.NET的过程。 简述cookies是如何工作的,给出一个cookies滥用的例子。...,代码加载所有dll,以及程序运行时使用的所有变量的内容。...sealed:当对一个类应用 sealed 修饰符,此修饰符会阻止其他类该类继承。...如果不打算重新编译ASP.NET应用程序,应该怎么做? 简述任意客户端请求路由到ASP.NET的过程。...较大的差异在于 SAX 模型是一个“推送”模型,其中分析器将事件推到应用程序每次读取新节点通知应用程序,而使用 XmlReader 的应用程序可以随意读取器提取节点。

    1.8K70

    使用 .NET Core 3.0 的 AssemblyLoadContext 实现插件热加载

    Roslyn 编译插件使用,表示插件编译需要引用哪些程序。...,然后调用 AssemblyLoadContext.Unload 允许 .NET Core 运行时卸载这个上下文加载程序程序的数据会在 GC 检测到所有类型的实例都被回收后回收 (参考文章开头的链接...接下来它会查找插件文件夹下的所有 C# 源代码,用 CSharpSyntaxTree 解析它们,并用 CSharpCompilation 编译,编译引用的程序列表是构造函数中取得的默认 AssemblyLoadContext...那么下次同一个路径加载仍然会返回第一次加载程序,这可能是 .NET Core 3.0 的实现问题并且有可能在以后的版本修复。...写在最后 本文的介绍就到此为止了,本文中我们看到了一个最简单的 .NET Core 3.0 插件热加载实现,这个实现仍然有很多需要改进的地方,例如如何管理多个插件、怎么重启宿主程序后避免重新编译所有插件

    4.8K30

    ASP.NET MVC的Razor引擎:View编译原理

    我们一个ASP.NET MVC应用中为HtmlHelper定义了如下一个扩展方法ListViewAssemblies,该方法用于获取当前被加载的包含View类型的程序程序名称以“App_Web_...它们具有如下相同的定义,我们View中显示自身的类型和当前加载的基于View的程序。...程序按需加载,即第一次访问“~/View/Foo/”目录下的View并不会加载针对“~/View/Bar/”目录的程序(实际上此时该程序尚未生成)。...上面我们简单地介绍ASP.NET MVC以目录为单位的动态View编译,有人可能会问一个问题:编译生成的程序存放在哪里?...默认情况下,View文件被动态编译后生成的程序被临时存放在ASP.NET的临时目录“%WinDir%\Microsoft.NET\Framework\{Version No}\Temporary ASP.NET

    1.7K70

    简析 .NET Core 构成体系

    上图描述了 .NET Core的系统构成,最上层是应用层,是开发基于UI应用的框架,包括了ASP.NET Core(用于创建web app),和 UWP(用于创建Windows10 app)。...CoreCLR & CoreRT CoreCLR 和 CoreRT 都是.NET Core的运行时(Runtime), 它们提供了与.NET Framework CLR 类似的核心功能(内存管理、程序加载...AOT的优化带来不少好处: 编译后生成一个单文件,包含所有的依赖,包括 CoreRT,无需安装Framework 启动是机器码,不需要生成机器码,也不要加载JIT编译器 可以使用其他优化编译器...如果使用JIT编译器部署程序时只需要将程序打包为IL的assemblies,方法第一次执行前编译器将IL编译为目标机机器码(Native code),而AOT编译会在编译将源代码直接编译为目标机机器码...ASP.NET Core 则以控制台应用程序驱动其托管环境 Kestrel Server 以支持 ASP.NET Core 程序的运行。

    78620

    使用FluentScheduler和IIS预加载asp.net中实现定时任务管理

    Execute函数中执行,如果不在web项目中运行,则不需要实现IRegisteredObject接口以及stop函数,所有的业务代码均在Execute函数中执行 ASP.NET中作定时任务 之前我们也有部分项目用...框架并没有什么必然的联系,你也可以用timer或其他的任何方式来实现,但是所有的这些实现方式都避免不了面对一个问题:IIS的回收机制 因为有了回收机制的存在,所以asp.net中做定时任务就会面临两个问题...void Stop(bool immediate); 第一次调用stop方法,参数为false,执行完毕后,如果没有调用HostingEnvironment.UnregisterObject函数,隔...,但是为了解决这个问题多写一个程序并没有必要,因为微软已经提供了一个网站预加载的功能,每当应用程序池被回收,系统就会启动一个进程模拟访问一遍网站。...这个功能似乎是iis7之后就有了,我下面演示的iis10的界面,其他版本的界面可能会稍微有所不同 1.修改应用程序池启动模式 ? 2.开启对应网站预加载 ?

    2.3K80

    ASP.Net请求处理机制初步探索之旅 - Part 4 WebForm页面生命周期

    当这个页面被提交到服务器,这些HTML标签会被创建到ASP.NET控件,并且viewstate还会和表单数据绑定在一起。...TIP:大部分的开发者直接使用Page_Load来干所有的事情,但这并不是一个好的思路。因此,无论是填充控件、设置ViewState还是应用主题等所有发生在页面加载中的所有事情。...三、反编译探秘ASP.Net Page页面生命周期 前面我们简单地了解了一下ASP.NET Page的页面事件,现在我们来通过Reflector反编译一下一个demo程序,来感受一下ASP.NET...中调用,它显示了我们这个ASP.NET项目所属的程序在哪个位置?...会通过IsPostBack判断是否是第一次请求,如果不是,那么首先会加载ViewState并对回发的数据进行处理。

    1.4K20

    IIS 5.x与ASP.NET

    WCF提供的这3种监听器和监听适配器定义程序SMHost.exe中,你可以通过下面的目录找到该程序:%windir%\Microsoft.NET\Framework\v3.0\Windows Communication...如果HTTP.SYS接收到的HTTP请求是对该Web应用的第一次访问,当成功加载了运行时后,会通过AppDomainFactory为该Web应用创建一个应用程序域(AppDomain)。...随后,一个特殊的运行时IsapiRuntime被加载。IsapiRuntime定义程序System.Web中,对应的命名空间为System.Web.Hosting。...表1按照实现的先后顺利列出了HttpApplication处理每一个请求触发的事件名称。...与之相似地,当请求转入ASP.NET管道后,最终负责处理该请求的是与请求资源类型相匹配的HttpHandler对象,但是Handler正式工作之前,ASP.NET会先加载并初始化所有配置的HttpModule

    2.8K20

    ASP.NET Core 性能最佳做法(上)

    禁止行为: 通过调用 Task.Wait 或 Task.Result 阻止异步执行。 获取常见代码路径中的锁。当构建为并行运行代码ASP.NET Core 应用的性能最高。...ASP.NET Core 已经普通线程池线程上运行应用代码,因此调用 Task.Run 只会导致不必要的额外线程池计划。即使计划的代码会阻止某个线程,Task.Run 也不会阻止该线程。...6最大程度减少大型对象分配 .NET Core 垃圾回收器 ASP.NET Core 应用中自动管理内存分配和释放。自动垃圾回收通常意味着开发人员无需担心如何或何时释放内存。...建议: 请异步调用所有数据访问 API。 请勿检索不需要的数据。编写查询以便仅返回当前 HTTP 请求所需的数据。 如果可接受稍微过时的数据,请考虑缓存数据库或远程服务检索的经常访问的数据。...建议: 请使用捆绑和缩小准则,其中提及了兼容工具,并演示如何使用 ASP.NET Core 的 标记处理 和 Production 环境。

    1.6K20

    Donut - 将 .NET 程序作为 Shellcode 注入

    执行程序 Cobalt Strike 3.11 中,Raphael Mudge 引入了一个名为“执行程序”的命令,该命令可以内存中运行 .NET 程序,就像磁盘中运行它们一样。...通过 CLR 加载程序后,原始引用将从内存中删除以阻止内存扫描器。程序加载到一个新的应用程序域中,以允许一次性 AppDomains 中运行程序。...程序加载之后但在它运行之前,解密的副本将被释放,然后使用 VirtualFree 内存中释放以阻止内存扫描器。...每当更改了payload.c,建议重建 donut 之前重新编译所有架构。...一次性应用程序域 当 donut 加载一个程序,它会将它加载到一个新的 AppDomain 中。

    2K00

    .NET面试题系列 - .NET框架基础知识(1)

    当安装.NET Framework所有的基础类库被部署到全局程序缓存(GAC)。它的位置一般C:\Windows\assembly。...CLR中一个名为Class loader(类加载程序)的组件负责这项工作。它会GAC、配置文件、程序元数据中寻找这个类型,然后将它的类型信息加载到内存中的数据结构中。...注意即使工程很大,有几百个程序,CLR不会全部加载,只会在真正用到该程序的时候才加载。 验证。CLR中,还存在一个验证程序(verifier),该验证程序的工作是在运行时确保代码是类型安全的。...当程序编译成程序之后,CLR加载任何需要用到的其他程序,并开始使用JIT将CIL编译为机器码。JIT编译器会在方法的首次调用时,类型的元数据中查找方法,并进行检查,例如检查类型是否安全。...例如,你写了一个小的控制台程序给别人用,那么你不需要把\bin\debug里面所有的文件都拷贝给别人,你只需要程序本身,必要的dll和config文件即可。

    1.7K10

    如何ASP.NET中生成HTML5离线Web应用

    传统的Web应用程序有一个很大的症结是当用户的网络连接不好,应用会加载失败,为了 解决这一问题,HTML5中引入了Web的离线工作的功能。...离线功能使得Web应用程序类似于本机应用程序,当断开网络连接可以继续浏览未浏览完成的内 容,离线功能的另一个好处是可以永久缓存静态的内容,而没有缓存过期的限制,这样很大程度上加速了网页的加载速度。...(2) ASP.NET应用程序中把清单信息通知给浏览器 HTML5规范规定这个清单文件必须以text/cache-manifest格式发送到客户端,但是现在没有标准的后缀来识别这一类型文件。...以上两个步骤就完成了离线应用程序的构建,当程序第一次加载,会加载这个缓存清单,并且根据清单中文件列表缓存文件,当浏览器再次加载就不会去 服务器中加载缓存过的文件,可以想象,如果我们把一些静态的网页添加为缓存文件...总结 以上就是介绍如何ASP.NET中应用HTML5离线功能,在其它的平台中的设置也是类似的,不同点在于如何把缓存文件以text/cache- manifest格式发送到客户端。

    1.2K60
    领券