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# 从加载的xml中释放内存?_C#_Xml - Fatal编程技术网

C# 从加载的xml中释放内存?

C# 从加载的xml中释放内存?,c#,xml,C#,Xml,例如,如果加载xml并出于任何原因使用它: XDocument doc = XDocument.Load("my.xml"); 既然您已经使用完它,并且想要释放它所使用的任何内存,最初我认为将它设置为null可以完成工作,但实际上并没有,那么如果可能的话,释放已使用内存的正确方法是什么呢?您正在做正确的事情。让GC像在有压力时一样担心它何时收集 正确的方法是简单地停止使用doc。垃圾收集器将在下次调用时清理内存,并确定代码不再引用doc 如果doc是本地文件,JIT将确定最后一个使用点,并使其

例如,如果加载xml并出于任何原因使用它:

XDocument doc = XDocument.Load("my.xml");

既然您已经使用完它,并且想要释放它所使用的任何内存,最初我认为将它设置为null可以完成工作,但实际上并没有,那么如果可能的话,释放已使用内存的正确方法是什么呢?

您正在做正确的事情。让GC像在有压力时一样担心它何时收集

正确的方法是简单地停止使用
doc
。垃圾收集器将在下次调用时清理内存,并确定代码不再引用
doc

如果
doc
是本地文件,JIT将确定最后一个使用点,并使其可在该点进行回收。无需
null
将其删除。陈雷蒙(Raymond Chen)有一篇很好的博客文章解释了这是如何工作的


我想知道的是,是否有可能强迫它处理它或类似的东西。我理解,但你真的不想搞砸这件事。让GC完成它的工作-你不会失望:)如果my.xml太大,也许你可以研究其他机制来读取和处理它,而不需要一次读取全部内容。GC应该在决定最好清理时清理。确保您没有在其他地方保留对该文档的引用。谢谢。。。这是一种处理所有数据的方式,我也尝试过流式处理数据,但这是一种更快的方式,但它不会释放内存中不需要的负载,直到我退出应用程序,这就是为什么我想知道它。@Prix流式处理数据是什么意思?您正在使用文件流和XDocument吗?我也有同样的问题。每次为新标签调用解析方法时,我都可以看到我的应用程序的内存消耗增加100MB。我将资源分配隔离到XDocument的load/parse方法。它存储在方法的局部变量中,但是内存永远不会释放。你最终是如何解决这个问题的?谢谢你的回答。我真的很想知道,在我用完它之后,是否有一种方法可以处理掉它。因为正在解析的数据量以及正在使用和未释放的内存量正在成为一个问题。当应用程序关闭时,它将全部释放,我不会对所有文件使用doc,这些文件的名称不同,例如客户端或产品。@Prix no没有。如果你看到你的应用程序内存不受控制地增长,那么在某个地方就有内存泄漏。您需要附加一个探查器来找出泄漏的内容。谢谢,只有在加载新xml时,它才会增长,即使我使用了不同的命名,它也不会释放内存,直到我退出程序。