代码之家  ›  专栏  ›  技术社区  ›  Gerald

当isapi过滤器实现sf_notify_send_raw_数据时,什么会导致吞吐量变慢?

  •  1
  • Gerald  · 技术社区  · 15 年前

    我有一个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 回复  |  直到 9 年前
        1
  •  0
  •   veefu    15 年前

    它与iis的内部以及它如何实现数据发送有关。此Microsoft博客文章位于: http://blogs.msdn.com/david.wang/archive/2005/12/14/How-IIS6-Compression-Schemes-interact-with-ISAPI-Filters.aspx 有点暗示将数据从内核移动到用户空间,并且无法使用vectorsend。我不完全明白那家伙在说什么,但我要说的似乎是“如果你能帮上忙的话,尽量避免发送原始数据”。