Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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#(.NET)应用程序中的内存使用率非常高,直到我调用System.GC.Collect()为止_C#_.net_Garbage Collection - Fatal编程技术网

C#(.NET)应用程序中的内存使用率非常高,直到我调用System.GC.Collect()为止

C#(.NET)应用程序中的内存使用率非常高,直到我调用System.GC.Collect()为止,c#,.net,garbage-collection,C#,.net,Garbage Collection,我写了一个应用程序,它可以旋转几个线程,每个线程读取几MB的内存。然后每个线程连接到Internet并上传数据。这种情况发生了数千次,每次上传都需要一些时间 我看到一种情况(通过windbg/sos和!dumpheap验证)字节[]未被自动收集,导致任务管理器中报告100/150MB内存 如果我调用System.GC.Collect(),我会看到内存大幅下降,超过100MB 我不喜欢调用System.GC.Collect(),我的电脑有大量的可用内存。然而,如果有人看到TaskManager,他

我写了一个应用程序,它可以旋转几个线程,每个线程读取几MB的内存。然后每个线程连接到Internet并上传数据。这种情况发生了数千次,每次上传都需要一些时间

我看到一种情况(通过windbg/sos和!dumpheap验证)字节[]未被自动收集,导致任务管理器中报告100/150MB内存

如果我调用System.GC.Collect(),我会看到内存大幅下降,超过100MB

我不喜欢调用System.GC.Collect(),我的电脑有大量的可用内存。然而,如果有人看到TaskManager,他们会担心,认为我的应用程序泄漏得很厉害


小费

运行时正在利用大量可用内存来减少垃圾收集器对应用程序性能的影响。这里的“问题”是(例如,您的用户)普遍不了解当系统有更多内存时,可以使用它(否则有什么意义?)。

问题是,一些用户确实检查了内存和cpu使用情况,并报告您的应用程序消耗过多,即使他们的性能没有问题。我认为他们这样做是为了向老板/女朋友/同事展示他们对计算机的了解程度


在你的应用程序中仔细放置CG.Collect可能会减少这个人类(而不是计算机)问题。我认为你应该这样做。

@Chris,如果你读更多关于GC的内容,你会发现这样的内存占用是意料之中的。当您捕获转储时,GC还没有释放字节[]的时间。@Chris:280z28和Lex是对的。只要您不必太长时间地保留byte[]引用,就没有什么可担心的。NET应用程序往往比本机应用程序使用更多的内存,因为GC将在需要时进行清理。。。牧师/唱诗班的事。。。我多次重复上述指导。到目前为止,我一直认为我是对的。我的问题是,如果你有大量的RAM,除非你用windbg/sos到处乱动,否则所有迹象都指向一个行为不端的应用程序。我的用户往往有点精明,但不是程序员。。。他们都通过寻找大量的内存使用来跟踪和修复行为不端的应用程序。。。我想我得在这上面吃点乌鸦。。。当我的应用程序完成了大部分繁重的工作后,我应该调用Collect(),否则(我可以测量)我的应用程序在taskmgr中被杀死,因为我的应用程序在taskmgr中被杀死(这很糟糕,我必须在重新启动时展开事务)。如何最好地调用Collect(),这样我就不会搞砸收集器了?