如何validation我的async / await是否正在使用I / O完成端口?
我目前正在将数据库存储过程调用转换为异步,利用async / await。 与此处描述的方法类似。
基于这个答案 ,我想validation异步调用实际上是否正在使用I / O完成端口。 如果它最终等待来自ThreadPool的另一个线程,那么它实际上是在破坏转换呼叫的目的。
validation正在使用I / O完成端口的最佳方法是什么?它不仅仅是阻塞另一个线程?
同时调用WAITFOR DELAY '1:00:00'
次。 如果使用的线程少于1000个,那么您将获得无线程IO。 您应该看到几十个(其中包括许多由运行时和框架启动的实用程序线程)。
您还可以打破调试器并确保当前没有线程正在等待IO。 你可以从堆栈跟踪中看出来。 这适用于任何现有的应用程序。
我会创建一些perfmon计数器并在线程池线程中更新它们。 然后,您可以观看正在使用的应用程序,并查看在任何给定时间正在使用的线程数,这反过来可能会帮助您调整数量。 您还可以记录每个线程所花费的时间,并计算一下,以便您可以看到平均等待时间,这可以帮助您确定它们是否被阻止,但我认为线程的数量也会显示出来 – 因为您如果他们互相等待,请立即看几个完整的。 取决于你正在做的工作。
我在几年前做了一个网络应用程序,它对性能调整应用程序非常有用。
- 列出Windows Azure Blob存储容器中的目录
- 将System.Windows.Media.Color转换为System.Drawing.Color
- 在Startup.cs .net core 2.1中加载程序集
- Unity在Play上崩溃,很可能是无限循环,但无法定位问题
- 使用Rx(Reactive Extensions)监视ObservableCollection中的特定项
- Windows Phone:如何判断Deployment.Current.Dispatcher.BeginInvoke何时完成?
- 如何将两个数据表数据连接到一个数据表中以在asp.net中的一个gridview中显示
- 如何将Checkbox作为dataGridView的ColumnHeader
- 多个异步/等待链接