如何防止每个http请求都加载和卸载OnDemandConnRouteHelper.dll?

How to prevent OnDemandConnRouteHelper.dll from being loaded and unloaded every http request?

呼叫IServerXmlHttpRequest.Open:

var http = (IServerXMLHTTPRequest2) new CreateComObject(CLASS_ServerXMLHTTP60);
http.Open("GET", "https://thepiratebay.org/description.php?id=54783221", false, "mhalifa", "hunter2");

导致每次加载和卸载库OnDemandConnRouteHelper.dll

| Time               | Operation                 | Path                                            | Result                        |
|--------------------|---------------------------|-------------------------------------------------|-------------------------------|
| 3:08:29.0705523 PM | CreateFile                | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS                       |
| 3:08:29.0705941 PM | QueryBasicInformationFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS                       |
| 3:08:29.0706149 PM | CloseFile                 | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS                       |
| 3:08:29.0708557 PM | CreateFile                | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS                       |
| 3:08:29.0709287 PM | CreateFileMapping         | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | FILE LOCKED WITH ONLY READERS |
| 3:08:29.0712518 PM | CreateFileMapping         | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS                       |
| 3:08:29.0714096 PM | Load Image                | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS                       |
| 3:08:29.0714328 PM | QueryNameInformationFile  | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS                       |
| 3:08:29.0717643 PM | CreateFile                | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS                       |
| 3:08:29.0807774 PM | CloseFile                 | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS                       |
| 3:08:29.0810143 PM | QueryNameInformationFile  | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS                       |

如您所见,这次旅行将 10.462 ms 添加到我的 http 请求中。

当整个请求是~30毫秒时,每次额外加载和卸载一个dll增加了50次操作%.

并将我的吞吐量从 50 requests/sec 减少到 33 requests/sec。

问题的动机已经足够了,继续提问

换句话说:我想要返还我的 50% - 我该如何获得?

Conn 路由助手

我不知道这个 dll 是做什么的,但唯一有用的功能记录在:

The OnDemandGetRoutingHint function looks up a destination in the Route Request cache and, if a match is found, return the corresponding Interface ID.

这听起来很有趣。但是,如果您立即卸载 dll,就会丢弃缓存 - 从而破坏缓存的任何用处。

这不是答案,但解决方法是手动加载一次库。

在 Windows 中不需要在程序退出前卸载 DLL - 当进程被 Windows 拆除时将卸载 DLL。

所以调用没有坏处:

  • LoadLibrary('OnDemandConnRouteHelper');

其实多次调用也没什么坏处

只是不要打电话 UnloadLibrary;因为那时它必须重新加载。