Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Visual studio 节点的源<;对象>;在VisualStudio内存快照中_Visual Studio - Fatal编程技术网

Visual studio 节点的源<;对象>;在VisualStudio内存快照中

Visual studio 节点的源<;对象>;在VisualStudio内存快照中,visual-studio,Visual Studio,我正在使用VisualStudio诊断工具为我的应用程序进行内存分析。我发现有一个节点占用了大量内存(基于包含的大小差异(字节)。(请参见下文#1)。当我单击节点的第一个实例“引用的对象”时,我看到节点正在引用其他节点。我在属性中看到类似“重叠数据”的内容 我如何才能找到从mscorlib.ni.dll创建这些节点的位置 当您在这些.NET Framework对象中寻找根时,选择的武器是一个很好的反编译器。我使用Reflector,还有其他一些 您看到一个不透明的节点对象返回。只需在搜索框中键

我正在使用VisualStudio诊断工具为我的应用程序进行内存分析。我发现有一个节点占用了大量内存(基于包含的大小差异(字节)。(请参见下文#1)。当我单击节点的第一个实例“引用的对象”时,我看到节点正在引用其他节点。我在属性中看到类似“重叠数据”的内容

我如何才能找到从mscorlib.ni.dll创建这些节点的位置


当您在这些.NET Framework对象中寻找根时,选择的武器是一个很好的反编译器。我使用Reflector,还有其他一些

您看到一个不透明的
节点
对象返回。只需在搜索框中键入它,就会弹出一些使用它的类型。大多数都在System.Collections.Concurrent命名空间中。好了,请不要再看了,探查器已经告诉过您了。显然,这是System.Collections.Concurrent命名空间中的
堆栈
类s存储节点

你的探查器告诉你,只有一个堆栈类对象拥有这些对象。很好,这将它缩小到只有一个对象。它正好有208个元素。嗯,没有那么多,是吗


这不是你必须停止的地方,Stack类是一个非常无用的类,没有人在他们的代码中实际使用它。继续使用反编译器,让它搜索该类的用法

啊,很好,这也是一个很短的列表。您可以看到System.Data.ProviderBase多次出现,嗯,这个问题可能与查询数据库无关。只有另一组引用是
System.PinnableBufferCache

“Pinnable buffers”,哇,这是一个匹配。当您要求本机代码完成填充托管数组的工作时,锁定缓冲区非常重要。使用
BeginRead()
,通用异步I/O调用。驱动程序在处理异步I/O请求时需要对阵列的稳定引用。获取稳定的缓冲区需要固定在.NET中。在探查器数据中,您可以看到
OverlappedData
,在Windows中执行异步I/O


你发现,长话短说。程序员注意到了,但并不经常


知道什么时候停止评测非常重要。你不能更改其他程序员编写的代码。微软没有人认为那家伙做错了什么。他没有,缓存是好事

你肯定完成了。祝贺你