2009-11-17 55 views
1

我有一个IIS6的ISAPI过滤器,我一直在开发,但我只注意到一些令人不安的东西。任何时候我安装了过滤器并且我下载了一个文件,文件下载变得非常慢。从远程机器上,我没有安装过滤器,每秒约120kb,安装过滤器时约为每秒45kb。当ISAPI筛选器实现SF_NOTIFY_SEND_RAW_DATA时,什么会导致吞吐量变得非常慢?

这似乎与SF_NOTIFY_SEND_RAW_DATA回调有关。每当我注册这个回调函数,我都会得到缓慢的下载,当我没有注册时,一切都很好。

即使我让我的HttpFilterProc功能只是立即返回,就像这样:

DWORD WINAPI HttpFilterProc(PHTTP_FILTER_CONTEXT pfc, 
    DWORD notificationType, 
    LPVOID pvNotification) 
{ 
    return SF_STATUS_REQ_NEXT_NOTIFICATION; 
} 

我也尝试返回SF_STATUS_REQ_HANDLED_NOTIFICATION具有相同的结果。

是否有可能我的DLL上有一些构建设置导致回调函数的执行速度缓慢,或者这只是它与ISAPI的方式?

回答

0

它与IIS的内部以及它如何实现数据发送有关。这篇Microsoft博客帖子在这里:http://blogs.msdn.com/david.wang/archive/2005/12/14/How-IIS6-Compression-Schemes-interact-with-ISAPI-Filters.aspx有关将数据从内核移动到用户空间以及无法使用VectorSend的提示。我不完全了解这个人是在说些什么,但是如果你能帮上忙的话,这个外卖似乎是“避免SF_NOTIFY_SEND_RAW_DATA”。

+0

我不认为不能使用VectorSend/TransmitFile,必须在用户模式下打开文件才能解释我在这里获得的性能。我们应该能够一次读取和发送1个字节,并且仍然能够保持每秒120kb的速率。 – Gerald 2010-01-27 20:59:53