.net 非常繁忙的垃圾收集(95%),有大量可用内存

.net 非常繁忙的垃圾收集(95%),有大量可用内存,.net,garbage-collection,.net,Garbage Collection,我们的应用程序现在性能不佳。当我们查看性能时,我们发现垃圾收集时间是执行时间的95%。但同时,我们的总体内存使用率相当低——正如TaskManager所示,我们有大量的可用内存。为什么呢?我认为垃圾收集器只有在内存压力很大时才会忙。任务管理器内存读取可能与分配给特定虚拟机的实际内存完全无关。可能您正在分配大量内存,并且可以释放大量对象。用于跟踪内存分配并尝试分配尽可能少的内存。你甚至可以在应用程序开始时分配所有内容,以后不分配任何内容。这样,您就不会“引诱”GC被调用。来自wiki: 垃圾收集(

我们的应用程序现在性能不佳。当我们查看性能时,我们发现垃圾收集时间是执行时间的95%。但同时,我们的总体内存使用率相当低——正如TaskManager所示,我们有大量的可用内存。为什么呢?我认为垃圾收集器只有在内存压力很大时才会忙。

任务管理器内存读取可能与分配给特定虚拟机的实际内存完全无关。

可能您正在分配大量内存,并且可以释放大量对象。用于跟踪内存分配并尝试分配尽可能少的内存。你甚至可以在应用程序开始时分配所有内容,以后不分配任何内容。这样,您就不会“引诱”GC被调用。

来自wiki:

垃圾收集(GC)是一种自动内存管理形式。垃圾收集器,或者只是收集器,尝试回收程序不再使用的对象所占用的垃圾或内存


如果您正在分配内存,但未能取消分配,则垃圾收集器将出现。查看您的代码,确保您分配的内存在超出范围时被释放。

不要查看任务管理器。尝试使用任何与.net相关的memroy查看器,这样您就可以了解garabage collector何时何地开始工作。我想这可能是因为您可能存在内存泄漏,尝试使用一些工具来更好地了解应用程序是否存在漏洞。

这与Android相关吗?如果是,请添加Android标签。哪种语言或平台?对不起,这是一个.net应用程序。clr是一个虚拟机。这也是我的想法。要确认它并确定地点并不容易。有没有办法扩大堆的大小,这样我就可以看到GC出现的频率会降低我知道这不是一个解决方案,只是想确认这是一个问题。你可以看看这个吗?对不起,我认为这个链接是关于Java的。我的是一个.net应用程序。你喜欢哪个?(我是说语言)@TheJoker在java、Pythono垃圾收集器这样的系统中定期释放内存。我们可以(显式地)调用垃圾来执行内存清理操作(我知道我们可以在Java中这样做)。所以,如果我们未能取消分配,您的线路是至关重要的。