相关疑难解决方法(0)

何时可以调用GC.Collect?

一般建议您不应该GC.Collect从您的代码中调用,但此规则的例外情况是什么?

我只能想到一些非常具体的案例,强制垃圾收集可能是有意义的.

想到的一个例子是服务,每隔一段时间醒来,执行一些任务,然后长时间睡眠.在这种情况下,强制收集以防止即将空闲的进程保持比需要的更多内存可能是个好主意.

是否还有其他可以接听电话的情况GC.Collect

.net c# garbage-collection

160
推荐指数
11
解决办法
10万
查看次数

使用GC.Collect()有什么不对?

虽然我确实理解玩这个功能的严重影响(或者至少是我的想法),但我不明白为什么它会成为那些受人尊敬的程序员不会使用的东西之一,即使是那些甚至不知道的人也是如此它是什么.

假设我正在开发一个应用程序,其中内存使用量根据用户的行为而变化很大.应用程序生命周期可分为两个主要阶段:编辑和实时处理.在编辑阶段,假设创建了数十亿甚至数万亿的对象; 其中一些是小的,一些不是,有些可能有终结器,有些可能没有,并且假设它们的寿命从几毫秒到长时间不等.接下来,用户决定切换到实时阶段.在这一点上,假设性能起着根本性的作用,程序流程中的最轻微改动可能会带来灾难性的后果.然后,通过使用对象池等将对象创建减少到最小可能,然后,GC意外地进行编辑并将其全部抛弃,并且有人死亡.

问题:在这种情况下,在进入第二阶段之前调用GC.Collect()不是明智的吗?

毕竟,这两个阶段永远不会在时间上相互重叠,GC可能收集的所有优化和统计数据在这里几乎没用......

注意:正如你们中的一些人所指出的那样,.NET可能不是这样的应用程序的最佳平台,但这超出了这个问题的范围.目的是澄清GC.Collect()调用是否可以改善应用程序的整体行为/性能.我们都同意你在这种情况下做这种事情的情况非常罕见,但话说再次,GC试图猜测并且在大多数情况下做得非常好,但它仍然是猜测.

谢谢.

.net performance garbage-collection memory-management

102
推荐指数
14
解决办法
6万
查看次数

C#中大型列表如何使用可用内存?

我有一个名单Population,是很多位置的很好的列表,在某些时候我停止使用它.我如何释放资源?那么这是代码的一部分:

 private List <BasePopulation> Population=new List <BasePopulation>();
 Population.SomeMethod();
 Population.Clear();
Run Code Online (Sandbox Code Playgroud)

我使用了Clear方法,但没有用.任何的想法?

c# garbage-collection list

25
推荐指数
2
解决办法
5万
查看次数