当ISAPI过滤器实现SF_NOTIFY_SEND_RAW_DATA时,什么会导致吞吐量变得非常慢?

时间:2009-11-17 06:58:25

标签: c++ isapi

我有一个IIS6的ISAPI过滤器,我已经开发了一段时间,但我只是注意到一些令人不安的事情。每当我安装过滤器并下载文件时,文件下载变得非常慢。从一台远程机器我没有安装过滤器,每秒约120kb,安装了过滤器,每秒约45kb。

这似乎与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一样?

1 个答案:

答案 0 :(得分: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”。