Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 信号器使用的任务的根输出_C#_Signalr_Task_Windbg - Fatal编程技术网

C# 信号器使用的任务的根输出

C# 信号器使用的任务的根输出,c#,signalr,task,windbg,C#,Signalr,Task,Windbg,我正试图在客户的C#程序中诊断一些内存问题。这个特殊的程序是一个客户端应用程序,它使用信号器与中央服务器进行通信 在使用windbg查看转储文件时,我注意到堆中有大量任务——大约80000个(这比我过去查看此应用程序内存转储的经验中的典型情况要多得多……实际上,在几乎任何上下文中,这似乎都过多) 因此,我对其中一个任务执行了gcroot,我必须将输出记录到文件中,因为到root的路径太长(日志文件大约有750000行) 输出是以下各项的重复: 0:000> !gcroot 000002e3

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

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

因此,我对其中一个任务执行了gcroot,我必须将输出记录到文件中,因为到root的路径太长(日志文件大约有750000行)

输出是以下各项的重复:

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],[System.Threading.Tasks.Task, 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
0:000>!gcroot 00000 2E3ACEB6C90
!gcroot 00000 2E3ACEB6C90
螺纹3f88:
000000e7907beb50 00007ff878acf2c6系统。线程。任务。任务。执行()
rbp+10:000000 E7907BEB90
->00000 2E3C68F74E0系统。线程。任务。任务
->00000 2E3C68F76B8 System.Threading.Tasks.StandardTaskContinuation
->00000 2E3C68F7668 System.Threading.Tasks.ContinuationTaskFromTask
->00000 2E3C68F7628系统.操作'1[[System.Threading.Tasks.Task,mscorlib]]
->000002e3c68f7600 Microsoft.AspNet.signar.TaskAsyncHelper+c___显示类72_0
->00000 2E3C68F75C0系统.操作'1[[System.Threading.Tasks.Task,mscorlib]]
->000002e3c68f7528 Microsoft.AspNet.signar.TaskAsyncHelper+c__显示类79_0
->000002e3c68f7558系统。线程。任务。任务完成源`1[[System.Object,mscorlib]]
->000002e3c68f7570系统.线程.任务.任务'1[[System.Object,mscorlib]]
->00000 2E3C68FF430 System.Threading.Tasks.StandardTaskContinuation
->00000 2E3C68FF3E0 System.Threading.Tasks.ContinuationTaskFromTask
->00000 2E3C68FF3A0系统.操作'1[[System.Threading.Tasks.Task,mscorlib]]
->000002e3c68ff378 Microsoft.AspNet.signar.TaskAsyncHelper+c__显示类72_0
->00000 2E3C68FF338系统.操作'1[[System.Threading.Tasks.Task,mscorlib]]
->000002e3c68ff2b0 Microsoft.AspNet.signar.TaskAsyncHelper+TaskRunners`2+c__显示类2_0[[System.Object,mscorlib],[System.Threading.Tasks.Task,mscorlib]]
->00000 2E3C68FF2D0系统.Threading.Tasks.TaskCompletionSource`1[[System.Threading.Tasks.Task,mscorlib]]
->00000 2E3C68FF2E8系统.线程.任务.任务'1[[System.Threading.Tasks.Task,mscorlib]]
->000002e3c68ff458 System.Threading.Tasks.Unwrapprovisie`1[[System.Threading.Tasks.TaskExtensions+VoidResult,System.Core]]
->00000 2E3C69037F0 System.Threading.Tasks.StandardTaskContinuation
->00000 2E3C69037A0 System.Threading.Tasks.ContinuationTaskFromTask
->00000 2E3C6903760系统.操作'1[[System.Threading.Tasks.Task,mscorlib]]
->00000 2E3C6903738 Microsoft.AspNet.signar.TaskAsyncHelper+c\u显示类72\u 0
->00000 2E3C69036F8系统.操作'1[[System.Threading.Tasks.Task,mscorlib]]
->00000 2E3C6903670 Microsoft.AspNet.signar.TaskAsyncHelper+TaskRunners`2+c__显示类2_0[[System.Object,mscorlib],[System.Threading.Tasks.Task,mscorlib]]
->00000 2E3C6903690系统.Threading.Tasks.TaskCompletionSource`1[[System.Threading.Tasks.Task,mscorlib]]
->00000 2E3C69036A8系统.线程.任务.任务'1[[System.Threading.Tasks.Task,mscorlib]]
->00000 2E3C6903818系统.线程.任务.解包'1[[System.Threading.Tasks.TaskExtensions+VoidResult,System.Core]]
->00000 2E3C69048A8 System.Threading.Tasks.StandardTaskContinuation
->00000 2E3C6904858 System.Threading.Tasks.ContinuationTaskFromTask
我只是不知道该怎么解释。我不确定这是信号机的问题,还是我们使用信号机的问题,或者这只是一件不需要担心的事情


这里还有什么可以看的?我已经试着看了一些任务实例的详细信息,但我并没有从中获得任何有用的信息。

在我看来,似乎有很多“继续”在进行。也许你可以检查一个任务是否有(私有的?)属性,在其中存储以下同级。然后,它可能有助于从这些同级中绘制一个图,可能会在图中找到一个循环(递归)。仅使用WinDbg可能会很困难。也许您想使用pykd或其他比WinDbgs内置机制更好的语言。也许可以看看dotMemory之类的工具。我怀疑它是否会绘制这样的图表,但它可以帮助确定有多少任务具有相同的gcroot,有多少任务不同。