如何验证我的异步/等待是否正在使用 I/O 完成端口
本文关键字:是否 何验证 验证 等待 异步 我的 | 更新日期: 2023-09-27 18:31:04
>我目前正在利用async/await将数据库存储过程调用转换为异步调用。类似于此处描述的方法。
基于此答案,我想验证异步调用是否确实使用 I/O 完成端口。如果它最终正在等待来自 ThreadPool 的另一个线程,那么它实际上违背了转换调用的目的。
验证 I/O 完成端口是否正在使用并且它不是简单地阻塞另一个线程的最佳方法是什么?
并行
调用WAITFOR DELAY '1:00:00'
1000 次。如果使用的线程远远少于 1000 个,您将获得无线程 IO。您应该会看到几十个(其中包括许多由运行时和框架启动的实用程序线程)。
还可以中断调试器,并确保当前没有线程在等待 IO。 您可以从堆栈跟踪中分辨出来。这适用于任何现有应用程序。
我会创建一些perfmon计数器并在线程池线程中更新它们。然后,您可以观察正在使用的应用程序,并查看在任何给定时间正在使用的线程数,这反过来可以帮助您调整数字。您还可以记录每个线程花费的时间,并计算它,以便您可以看到平均等待时间,这将帮助您确定它们是否被阻止,尽管我认为线程的数量也会显示这一点 - 因为如果它们正在等待,您会同时看到几个完成。取决于您正在做的工作。
几年前我为一个 Web 应用程序做了这个,它对应用程序的性能调整非常有用。