2012-10-16 39 views
3

我一直在調查c#服務器應用程序中的一些垃圾收集問題。我目前使用PerfView來做到這一點。收集一些數據並獲得GC統計數據後,我對「觸發原因」一欄有些困惑。我得到了兩個值'AllocLarge'和'AllocSmall'。我已經通過幫助和谷歌搜索,找不到這兩個術語的意思。PerfView GC觸發原因

回答

9

.NET GC將大於85K的對象(大對象)視爲與其他對象(小對象)非常不同。特別是大型物體僅在「第二代」(最昂貴的GC)中收集。 'AllocLarge'意味着GC在分配大對象時觸發(因此必須激發第2代GC)。 'AllocSmall'意味着GC發生在響應'普通'對象的分配。

請注意,一般來說,擁有短命的大型對象(因爲這些對象需要昂貴的GC)是不好的。通過查看'GC Alloc Stats'視圖並查找僞幀'LargeObject',您可以在任何地方看到您分配了一個大對象。雙擊(這會將你帶到'調用者'視圖,yoiu會看到你正在分配大對象的位置。

+0

在PerfView中,當做兩個gc轉儲差異時,負數和正數表示什麼意思? – DBK