![]() |
1
5
因此,您应该看到数字的增加,这并不意味着内存在泄漏,而是GC已经运行。
在第一种情况下,您也可以看到这种增长。它只会发生得慢得多,因为非常慢
|
![]() |
2
3
另一个需要注意的是
有一个
如果您真的想在不同的情况下准确地跟踪GC统计信息,我将在您的进程中使用Windows性能监视器,您可以在其中创建各种类型的监视器,包括.NET堆统计信息。 |
![]() |
3
1
如果您只等待几秒钟,您会看到收集计数在第一个测试中也会增加,但不会增加得那么快。 代码之间的区别在于,第一个测试总是尽可能快地写出收集计数,而第二个测试循环,直到达到时间限制才写出任何数据。 第一个测试花费大部分时间等待文本写入控制台,而第二个测试花费大部分时间循环,等待时间限制。第二个测试将在同一时间进行更多的迭代。 我计算了迭代次数,并打印出每个垃圾收集的迭代次数。在我的计算机上,第一个测试稳定在每个GC 45000次迭代左右,而第二个测试稳定在每个GC 130000次迭代左右。 所以,第一个测试实际上是 更多 垃圾收集比第二次测试多了大约三倍。 |
![]() |
4
0
谢谢大家!你的建议有助于揭露罪魁祸首:
GC不会一直运行,但只在分配内存时运行。如果内存使用率很低,则
测试的最新迭代展示了这种行为。第一次测试运行没有分配任何堆内存(
现在,两个
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |