禁用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清空缓存时遇到的问题简析
- asp.net – 解决.net Web应用程序中的可伸缩性和性能问题
- 在经典ASP中对集合进行排序
- asp.net – 如果我没有指定targetFramework =“4.0”会发生
- asp.net-mvc – mvc3 maxLength输入
- asp.net – 正常与云/ Azure托管和SQL Azure与SQL Server的
- asp.net-mvc-3 – MVC3 WebGrid:可以在行/列上使用htmlAtt
- ASP.NET NHibernate事务持续时间
- 每个页面上的ASP.NET MVC自定义用户字段
- asp.net-mvc – Razor不会在HiddenFor中呈现隐藏的准确PK
- asp.net-mvc – ASP.NET MVC中的Page.EnableSess
- 当用户使用ASP.NET应用程序中的Entity Framework
- asp.net-web-api – 如何确保ASP.net Web API控制
- asp.net-mvc-3 – 使用FluentValidation / MVC 3
- asp.net-core – IWebHost WebHostBuilder Build
- asp.net-mvc – 有人解释我Html.DropDown,它是最
- asp.net-web-api – 如何在Azure Service Fabric
- asp.net – 如何使用DataPager与服务器端寻呼?
- asp.net – 我如何做一个已经内置到dll中的程序集
- asp.net – Elmah错误日志记录,我可以只记录一条