debug = true在web.config =坏事情?
我们看到很多虚拟内存碎片和内存不足错误,然后达到3GB的限制。
编译debugging设置为true在web.config中,但我得到不同的答案,我问每个人,debugging设置为true,导致每个aspx编译成ram随机区域,从而碎片该ram,并最终导致内存不足的问题?
Scott Guthrie(ASP.NET开发团队的经理)有一篇有趣的文章 。
为什么你不应该离开debug =“true”最重要的是:
- ASP.NET页面的编译需要更长时间(因为禁用了一些批量优化)
- 代码可以执行得更慢(因为启用了一些额外的debuggingpath)
- 运行时在应用程序中使用了更多的内存
- 从WebResources.axd处理程序下载的脚本和图像不会被浏览器caching,从而导致客户端和服务器之间的更多请求
他还提到了machine.config中的<deployment retail=”true”/
>标志,它允许全局覆盖机器上运行的所有应用程序(例如生产服务器)上的debug =“true”标志。
更新 :用debug="true"
部署web应用程序仍然不好,你可以在Scott Hanselman最近的博客文章中阅读 :
这是debug =“true”不好的原因。 说真的,我们不是在开玩笑。
- 覆盖请求执行超时使其有效无限
- 禁用页面和JIT编译器优化
- 在1.1中,导致CLR过多的内存使用,用于debugging信息跟踪
- 在1.1中,closuresdynamic页面的批量编译,每页导致1个程序集。
- 对于VB.NET代码,会导致过度使用WeakReference(用于编辑和继续支持)。
一个重要的注意事项:与有时认为的相反,在一个元素中设置retail =“true”并不是debugging=“真”的直接解毒剂!
除非实际需要debugging应用程序,否则在web.config中debugging标志应设置为false。
在debugging模式下运行可能会增加内存使用量,但不像您所说的那样严重。 但是,您应该将其设置为false以消除其影响,并查看是否可以注意到任何改进。
在debugging模式下运行时,垃圾收集工作方式不同。 variables的生存时间从实际使用扩展到variables的范围(能够在debugging器中显示值)。 这使得一些物体在被垃圾收集之前活得更久。
编译器在debugging模式下编译时不会优化代码,并且还会添加一些额外的nop
指令,以便每条代码行至less有一条可放置中断点的指令。
在debugging模式下抛出exception需要相当长的时间。 (但是,通常代码不应该经常抛出exception。)
这绝对会影响内存,只要看看一些perfmon计数器,并对两种configuration进行比较。
如果您的网站有很多的文件,我会更关心在asp.net临时文件夹中的磁盘io。
几个问题…
- 你的App_Code中有很多文件吗?
- 你是否允许该网站是可更新的,或者你是发布它?
- 如果是的话,这个网站是经常更新还是有一个部署过程?
- 什么是硬件configuration?
为什么不使用多个configuration?
Web.Debug.Config – 打开了debuggingWeb.UAT.Config – 无论您的首选项Web.Release.Config – closuresdebugging
这样你可以最小化回归configuration错误,比如开发者用debug =“true”来检查web.config,
AFAIK“debug = true”不会导致你提到的情况。
我曾经遇到与运行中创build图像的ASP.NET应用程序相同的问题。
所以我觉得你有没有处理资源的问题。
如果您将具有代码隐藏文件的aspx文件部署到服务器。 当请求到达一个aspx时,它将被编译一次。 那么它将被存储到caching中,直到文件改变。
在生产系统上总是设置Debug = false。 正如该标志所示,在debugging开发系统时应该只设置为true。
这个标志与你的内存碎片问题无关。
- 将Web API添加到现有的MVC Web应用程序后发生404错误
- IIS 7错误“指定的login会话不存在。 它可能已经被终止。“当使用https
- GridView中的Asp.Net UpdatePanel Jquery DatePicker
- 为什么javascript onchange事件在自动完成时不会触发?
- 如何使用Dapper Dot Net从数据库结果映射到Dictionary对象?
- 如何从代码隐藏中访问RouteData?
- 如何给ASP.NET权限写入Windows 7中的文件夹?
- 将ASP.NET MVC5身份validation添加到现有项目
- 不同的是:accept-encoding是什么意思?