gpt4 book ai didi

c# - TPL 的性能计数器?

转载 作者:太空狗 更新时间:2023-10-29 21:55:22 25 4
gpt4 key购买 nike

有什么方法可以查看(最好通过内置性能计数器)TPL 有多少工作在排队等待处理?

以下是有关我正在尝试做的事情和我所看到的事情的一些详细信息:

我有一个很大的工作负载,我正在使用 Task.Factory.StartNew()(默认调度程序)卸载到 .NET 线程池。当负载超过我的系统可以处理时,工作会排队,直到负载减少或我用完内存。作为我处理的一部分,我确实更新了一个自定义性能计数器(它是一个每秒计数器),我可以看到这个计数器不会超过大约 27 000(每秒消息数),无论我排队了多少消息任务.工厂.StartNew()。

我的问题更多是关于监控,而不是关于让系统性能更好的建议 - 我可以进行微优化,但目前在正在建立的性能计数器中没有可见性。除了优化,我希望能够准确地看到 TPL 缓冲了多少工作,纯粹是为了衡量我的系统的响应能力。我正在查看在输入端放入新消息是否会导致立即处理(零延迟),或者在我看到请求结果之前是否会有一些延迟。

现在发生的情况是每秒低于 27000 条消息,如果我停止输入,我会看到“每秒处理的消息”计数器降至零。在这个断点之上,计数器继续每秒记录 27k 一段时间(取决于我让积压累积多长时间),直到其余负载通过系统完成。

最佳答案

我认为最简单的方法是维护另一个性能计数器,当每个任务排队时递增,并在每个任务开始时递减。

更复杂的选择是编写一个自定义的 TaskScheduler 来处理发布所有必需的事件,但我想这可能会大大减慢速度,除非仔细实现,但这就是您为检测付出的代价.然后,您可以切换仅在需要检测时使用的调度程序。

这是一篇关于编写自定义 TaskScheduler 的文章:http://msdn.microsoft.com/en-us/library/ee789351.aspx

如果您确实编写了这个 TaskScheduler 实现,尽管我认为它会对社区有用,所以请在此处发布结果并可能将代码放在 GitHub 上 :)

关于c# - TPL 的性能计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com