我正在对项目的关键部分进行性能测试,这时我注意到有很多额外的线程被用来执行 WaitOrTimerCallback 操作。
经过仔细检查,我可以看到这些是由我的 ASMX 客户端代理类生成的,用于在远程服务器上进行操作。
我的印象是这些都在使用 IO 完成端口,就像我所有的其他异步 IO 调用一样。
是否可以让 ASMX 或 WCF 代理客户端使用 IO 完成端口?如果不是 - 真的有什么意义?
[更新] 该项目正在使用 ASMX 代理客户端。看来他们正在使用普通线程池来注册 WaitOrTimerCallback。我现在正在使用 WCF 代理客户端。这些不会产生额外的线程,所以我只能假设它们正在使用所需的 IO 完成端口。
ASMX 代理类是使用 Visual Studio 2008 创建的。我在项目文件中添加了以下行:“WebReference_EnableLegacyEventingModel>true” 因为当前的 ASMX 客户端默认没有启用异步。