禁用ASP.NET HttpHandler响应缓存
|
背景 我正在比较在IIS 7下运行的NancyFx和ServiceStack.NET的性能(在Windows 7主机上进行测试)。两者都是疯狂的快速 – 本地测试每个框架过程超过10,000 req /秒,ServiceStack快20%。 我遇到的问题是,ASP.NET似乎正在缓存来自HttpHandler的每个唯一的URI请求的响应,很快导致巨大的内存压力(3 GB),并使垃圾收集器工作过多(约25% GC)。到目前为止,我一直无法禁用对象的缓存和构建,并且正在寻找有关如何禁用此行为的建议。 细节 请求循环基本如下: for i = 1..100000:
string uri = http://localhost/users/{i}
Http.Get(uri)
响应是一个简单的JSON对象,格式为{UserID:n}。 我打开了WinDBG,对于每个请求都有: > One System.Web.FileChangeEventHandler 显然,这些缓存项目是引导我相信这是一个缓存膨胀的问题(我想要摆脱15万个不可用的对象!)。 到目前为止我已经尝试过 >在IIS的HTTP响应标头中,将“过期Web内容”设置为“立即”。 <system.web>
<caching>
<outputCache enableOutputCache="false" enableFragmentCache="false"/>
</caching>
</system.web>
>还有在web.config(和许多变体的策略,包括没有)。 <caching enabled="false" enableKernelCache="false">
<profiles>
<add policy="DontCache" kernelCachePolicy="DontCache" extension="*/>
</profiles>
</caching>
>查看框架的源代码,看看是否有任何内置的功能将使用ASP.NET缓存。虽然有缓存助手,但它们对于框架本身是私有的,并不会出现利用ASP.NET缓存。 更新#1 通过反射器挖掘我发现将UrlMetadataSlidingExpiration的值设置为零消除了大量的内存使用量过多,牺牲了将吞吐量降低了50%(FileAuthorizationModule类缓存FileSecurityDescriptors,这些生成必须有点昂贵,当UrlMetadataSlidingExpiration不为零时)。 这是通过更新web.config并将以下内容放在 <hostingEnvironment urlMetadataSlidingExpiration="00:00:00"/> 如果可能,我将尝试完全禁用FileAuthorizationModule运行,看看是否有帮助。但是,ASP.NET仍然生成2 * N MapPathCacheInfo和CacheEntry对象,所以内存仍然被消耗,只是速度慢得多。 更新#2 另一半的问题是与这里所述相同的问题:Prevent many different MVC URLs from filling ASP.NET Cache.设置 < cache percentagePhysicalMemoryUsedLimit =“1”privateBytesPollTime =“00:00:01”/> 解决方法对于遇到同样问题的其他人迟到的回应:这是一个已知的问题:
您可以下载修补程序here (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在MVC5中呈现Razor的部分视图
- asp.net-mvc – ASP.NET MVC运行IIS7部署问题
- asp.net-core – Controller.json设置Serialization.Refere
- asp.net – 无法识别的配置部分log4net. web.config网站
- asp.net – 插入后在实体框架中获取记录ID
- asp.net – 在webrequest上停止了应用程序池
- asp.net-mvc – MVC 6:如何使用RESX文件?
- asp.net – 当我将’启用32位应用程序’更改为False时,为什
- asp.net – 如何使用ValueInjector映射列表
- asp.net-mvc – ASP.net MVC验证钩
- asp.net-mvc-4 – 如何在Durandal中使用cshtml文
- ASP.NET 2.0 – 带有tbody / thead的DataGrid
- asp.net-mvc – 安全地从MVC5项目中删除所有OWIN
- asp.net-mvc – 启用/禁用每个控制器/操作方法的
- 在ASP.Net网站上实现自定义错误页面
- asp.net-mvc – 将SignalR与Azure表存储一起使用
- .net – IAuthenticationFilter.OnAuthenticatio
- 在asp.net mvc中绑定缺少元素的数组
- Asp.Net MVC是企业项目的合适解决方案吗?
- asp.net-mvc-3 – insert命令需要插入数据绑定设
