Ter*_*wis 6 c# performance task-parallel-library
有没有办法看到(最好是通过内置的性能计数器)TPL已经排队等待它正在尝试通过多少工作?
以下是关于我正在尝试做什么以及我所看到的一些细节:
我有一个很大的工作负载,我正在使用Task.Factory.StartNew()(默认调度程序)卸载到.NET Threadpool.当负载超过我的系统可以处理的负载时,工作会排队,直到负载减少或内存不足.我确实更新了一个自定义性能计数器(它是一个每秒计数器)作为我处理的一部分,我可以看到这个计数器不会超过大约27 000(每秒消息数),无论我排队多少消息Task.Factory.StartNew().
我的问题更多的是关于监控而不是关于使系统性能更好的建议 - 我可以进行微优化,但目前在工作正在建立的性能计数器中没有可见性.除了优化之外,我希望能够确切地看到TPL已经缓冲了多少工作,纯粹是因为我可以衡量我的系统的响应能力.我希望看到在输入端添加新消息是否会导致立即处理(零延迟),或者在我看到我的请求的结果之前是否会有一些延迟.
现在发生的是每秒低于27 000条消息,如果我停止输入,我会看到"每秒处理的消息数"计数器降为零.在这个突破点之上,计数器继续每秒注册27k(取决于我积压积压的时间长度),直到其余的负载通过系统.
我认为最简单的事情是维护另一个性能计数器,您在每个任务排队时递增,并在每个任务启动时递减。
更复杂的选项是编写一个自定义TaskScheduler来处理发布所有必需的事件,但我再次认为,除非仔细实施,否则这可能会大大减慢速度,但这就是您为检测付出的代价。然后,您可以仅在需要仪器时切换您使用的调度程序。
这是一篇有关编写自定义的文章TaskScheduler:http://msdn.microsoft.com/en-us/library/ee789351.aspx
如果您确实编写了这个TaskScheduler实现,但我认为它对社区很有用,所以请在此处发布结果,或者将代码放在 GitHub 上:)
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |