积极答复者
C#如何通过垃圾回收原理做好内存分配

问题
答案
-
你好,
>>世代照我的理解是每次有没有回收的就压到下一个世代,这个时候我感觉是已经发生了移动,但腾出了更大一片连续的空间,每次回收只回收一个世代的,这样当内存不够回收时由于只回收这一个世代的,所以移动的次数还是减少了的。
GC 对Heap 分3代, 每代都有一个阀值, 如果Gen 0 heap内存达到阀值,则触发0代GC,0代GC后Gen 0中幸存的对象进入Gen1。如果Gen 1的内存达到阀值,则进行1代GC,1代GC将Gen 0 heap和Gen 1 heap一起进行回收,幸存的对象进入Gen2。
2代GC将Gen 0 heap、Gen 1 heap和Gen 2 heap一起回收,Gen 0和Gen 1比较小,这两个代龄加起来总是保持在16M左右;Gen2的大小由应用程序确定,可能达到几G,因此0代和1代GC的成本非常低,2代GC称为full GC,通常成本很高。粗略的计算0代和1代GC应当能在几毫秒到几十毫秒之间完成,Gen 2 heap比较大时,full GC可能需要花费几秒时间。大致上来讲.NET应用运行期间,2代、1代和0代GC的频率应当大致为1:10:100。
所以对应我们的程序,少定义全局的变量,比如静态的,尽量减少Full GC 来提高程序的性能。
Best regards,
Zhanglong
MSDN Community Support
Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.- 已标记为答案 我是菜鸟啦 2018年11月19日 16:10
-
事件注册后,及时注销,请问事件注册也消耗空间?
假設 B 物件註冊了 A 物件的事件,這表示 A 物件會透過事件持有對 B 物件的引用。
所以當 A 物件沒有被移除且 B 物件沒有取消對該事件的註冊時,B 物件不會被回收。
在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/
- 已标记为答案 我是菜鸟啦 2018年11月19日 16:09
全部回复
-
你好,
>>世代照我的理解是每次有没有回收的就压到下一个世代,这个时候我感觉是已经发生了移动,但腾出了更大一片连续的空间,每次回收只回收一个世代的,这样当内存不够回收时由于只回收这一个世代的,所以移动的次数还是减少了的。
GC 对Heap 分3代, 每代都有一个阀值, 如果Gen 0 heap内存达到阀值,则触发0代GC,0代GC后Gen 0中幸存的对象进入Gen1。如果Gen 1的内存达到阀值,则进行1代GC,1代GC将Gen 0 heap和Gen 1 heap一起进行回收,幸存的对象进入Gen2。
2代GC将Gen 0 heap、Gen 1 heap和Gen 2 heap一起回收,Gen 0和Gen 1比较小,这两个代龄加起来总是保持在16M左右;Gen2的大小由应用程序确定,可能达到几G,因此0代和1代GC的成本非常低,2代GC称为full GC,通常成本很高。粗略的计算0代和1代GC应当能在几毫秒到几十毫秒之间完成,Gen 2 heap比较大时,full GC可能需要花费几秒时间。大致上来讲.NET应用运行期间,2代、1代和0代GC的频率应当大致为1:10:100。
所以对应我们的程序,少定义全局的变量,比如静态的,尽量减少Full GC 来提高程序的性能。
Best regards,
Zhanglong
MSDN Community Support
Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.- 已标记为答案 我是菜鸟啦 2018年11月19日 16:10
-
事件注册后,及时注销,请问事件注册也消耗空间?
假設 B 物件註冊了 A 物件的事件,這表示 A 物件會透過事件持有對 B 物件的引用。
所以當 A 物件沒有被移除且 B 物件沒有取消對該事件的註冊時,B 物件不會被回收。
在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/
- 已标记为答案 我是菜鸟啦 2018年11月19日 16:09