IIS7模块 - 托管还是本机?

Sim*_*der 3 iis-7 module native unmanaged managed


由于旧的ISAPI过滤器迟早会死掉,我想将IIS 6中使用的旧ISAPI过滤器重写为一个模块,以便在IIS 7中使用.该模块将在全局范围内使用,这意味着它将在每个模块中使用.站点,在安装了IIS 7.5的Windows Server 2008 R2上,将承载数千个网站并管理大约50个应用程序池.
我现在的问题是,我是否应该在托管或非托管代码中编写该模块?我对托管代码的一个担忧是由于.NET框架开销导致的大量内存消耗.我不知道这会如何影响服务器的性能.
我已经在托管代码和非托管代码中编写了模块.所以这不是我的决定困扰.但是如果没有巨大的缺点,我宁愿用C#编写模块.
关于这个问题的任何建议?

hem*_*emp 5

Rick Strahl 在这个主题上提供了合理的建议,我在lear.iis.net的文章中多次回应过这些建议.

了解使用所有这些功能做错事的可能性也很重要.首先请记住,托管代码比Web服务器中的本机代码慢.通过将托管代码引入核心服务器,您正在降低Web服务器的性能.具体而言,在集成模式下运行并且存在托管模块时,托管代码和非托管代码之间的上下文切换非常昂贵.我与一些微软开发人员进行了交谈,他们正在努力通过尽可能多地批量调用托管代码组件来优化这些上下文切换,尽可能长时间地保持托管代码.

默认情况下,托管代码是可选的 - 所有核心模块都是本机代码,因此添加托管模块是您必须做出的明确决定.如果您已经在使用ASP.NET,那么这个决定可能是一个明智的选择.但是,如果您今天正在运行原始的ISAPI扩展或模块,那么您可能需要仔细研究托管代码是否适合性能.

简而言之,如果所有应用程序都是ASP.NET,那么为IIS编写托管模块应该有很少或没有开销 - 这是一个简单的选择.

但是,如果网站本身不会加载CLR,那么这样做是为了执行你的模块将是昂贵的,你需要仔细考虑(测量!)影响,以确定性能影响是否值得开发 - 生产力提高.