微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SignalR 使用的任务的奇怪 gcroot 输出

如何解决SignalR 使用的任务的奇怪 gcroot 输出

我正在尝试诊断客户的 C# 程序中的一些内存问题。这个特定的程序是一个客户端应用程序,它使用 SignalR 与中央服务器通信。

在使用 windbg 查看转储文件时,我注意到堆中有大量任务 - 大约 80,000 个(这比我查看此应用程序的内存转储的经验中的典型值要多得多)过去……实际上这在几乎任何情况下都显得过分)。

因此,我对其中一个任务进行了 gcroot,我不得不将输出记录到文件中,因为 root 的路径太长(日志文件大约有 750,000 行。

输出是以下内容的重复:

0:000> !gcroot 000002e3aceb6c90
!gcroot 000002e3aceb6c90
Thread 3f88:
    000000e7907beb50 00007ff878acf2c6 System.Threading.Tasks.Task.Execute()
        rbp+10: 000000e7907beb90
            ->  000002e3c68f74e0 System.Threading.Tasks.Task
            ->  000002e3c68f76b8 System.Threading.Tasks.StandardTaskContinuation
            ->  000002e3c68f7668 System.Threading.Tasks.ContinuationTaskFromTask
            ->  000002e3c68f7628 System.Action`1[[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c68f7600 Microsoft.AspNet.SignalR.TaskAsyncHelper+<>c__displayClass72_0
            ->  000002e3c68f75c0 System.Action`1[[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c68f7528 Microsoft.AspNet.SignalR.TaskAsyncHelper+<>c__displayClass79_0
            ->  000002e3c68f7558 System.Threading.Tasks.taskcompletionsource`1[[System.Object,mscorlib]]
            ->  000002e3c68f7570 System.Threading.Tasks.Task`1[[System.Object,mscorlib]]
            ->  000002e3c68ff430 System.Threading.Tasks.StandardTaskContinuation
            ->  000002e3c68ff3e0 System.Threading.Tasks.ContinuationTaskFromTask
            ->  000002e3c68ff3a0 System.Action`1[[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c68ff378 Microsoft.AspNet.SignalR.TaskAsyncHelper+<>c__displayClass72_0
            ->  000002e3c68ff338 System.Action`1[[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c68ff2b0 Microsoft.AspNet.SignalR.TaskAsyncHelper+TaskRunners`2+<>c__displayClass2_0[[System.Object,mscorlib],[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c68ff2d0 System.Threading.Tasks.taskcompletionsource`1[[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c68ff2e8 System.Threading.Tasks.Task`1[[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c68ff458 System.Threading.Tasks.UnwrapPromise`1[[System.Threading.Tasks.TaskExtensions+VoidResult,System.Core]]
            ->  000002e3c69037f0 System.Threading.Tasks.StandardTaskContinuation
            ->  000002e3c69037a0 System.Threading.Tasks.ContinuationTaskFromTask
            ->  000002e3c6903760 System.Action`1[[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c6903738 Microsoft.AspNet.SignalR.TaskAsyncHelper+<>c__displayClass72_0
            ->  000002e3c69036f8 System.Action`1[[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c6903670 Microsoft.AspNet.SignalR.TaskAsyncHelper+TaskRunners`2+<>c__displayClass2_0[[System.Object,mscorlib]]
            ->  000002e3c6903690 System.Threading.Tasks.taskcompletionsource`1[[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c69036a8 System.Threading.Tasks.Task`1[[System.Threading.Tasks.Task,mscorlib]]
            ->  000002e3c6903818 System.Threading.Tasks.UnwrapPromise`1[[System.Threading.Tasks.TaskExtensions+VoidResult,System.Core]]
            ->  000002e3c69048a8 System.Threading.Tasks.StandardTaskContinuation
            ->  000002e3c6904858 System.Threading.Tasks.ContinuationTaskFromTask

我只是不知道该怎么做。我不确定这是 SignalR 的问题,还是我们使用 SignalR 的问题,或者只是不需要担心的问题。

我还能在这里看到什么?我已经尝试查看其中一些 Task 实例的详细信息,但我并没有从中获得任何有用的信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。