1

我正在对项目的关键部分进行性能测试,这时我注意到有很多额外的线程被用来执行 WaitOrTimerCallback 操作。

替代文字 http://lh4.ggpht.com/_p7-jVU64mGg/SZuWgUvTD7I/AAAAAAAAAEk/PUFrXrYvZh0/threads_thumb%5B1%5D.jpg?imgmax=800

经过仔细检查,我可以看到这些是由我的 ASMX 客户端代理类生成的,用于在远程服务器上进行操作。

我的印象是这些都在使用 IO 完成端口,就像我所有的其他异步 IO 调用一样。

是否可以让 ASMX 或 WCF 代理客户端使用 IO 完成端口?如果不是 - 真的有什么意义?

[更新] 该项目正在使用 ASMX 代理客户端。看来他们正在使用普通线程池来注册 WaitOrTimerCallback。我现在正在使用 WCF 代理客户端。这些不会产生额外的线程,所以我只能假设它们正在使用所需的 IO 完成端口。

ASMX 代理类是使用 Visual Studio 2008 创建的。我在项目文件中添加了以下行:“WebReference_EnableLegacyEventingModel>true” 因为当前的 ASMX 客户端默认没有启用异步。

4

1 回答 1

2

我不能代表 ASMX,但 WCF 肯定会(如果 ASMX 没有,我会像你一样感到惊讶)。您能否获取调用堆栈以确保它们确实被网络调用(而不是其他一些用户代码)阻塞?

于 2009-02-18T05:31:58.243 回答