問題中提供的信息可能不足以明確說明問題的根源。這可能是一個版本特定問題,我無法複製,或者您的堆已損壞(運行!verifyheap
)。
以下程序創建長度爲64(128字節的數據),長度爲200(400字節的數據)和長度爲1024(2048字節的數據)的字符串。
using System;
using System.Collections.Generic;
namespace StringSizeDumpheap
{
class Program
{
static void Main(string[] args)
{
List<string> smallstrings = CreateList(1000, 64);
List<string> mediumstrings = CreateList(1000, 200);
List<string> largestrings = CreateList(1000, 1024);
const string dbginfo = "Debug now. Use !dumpheap -min -max with 0n140/0n144, 0n400/0n440 and 0n2000/0n2200.";
Console.WriteLine(dbginfo);
Console.ReadLine();
// Access strings to prevent optimization
smallstrings[0] = "";
mediumstrings[0] = "";
largestrings[0] = "";
}
private static List<string> CreateList(int count, int size)
{
List<string> list = new List<string>();
for (int i = 0; i < count; i++)
{
list.Add(new string('x', size));
}
return list;
}
}
}
隨着該演示程序,WinDbg的+ SOS給出的WinDbg 6.2.9200預期的結果(程序編譯爲.NET 4.5.2,32位的優選的,調試版本)
0:004> !dumpheap -stat -mt 70dde918 -min 0n140 -max 0n144
Statistics:
MT Count TotalSize Class Name
70dde918 1002 142284 System.String
Total 1002 objects
0:004> !dumpheap -stat -mt 70dde918 -min 0n380 -max 0n500
Statistics:
MT Count TotalSize Class Name
70dde918 1000 414000 System.String
Total 1000 objects
0:004> !dumpheap -stat -mt 70dde918 -min 0n2000 -max 0n2200
Statistics:
MT Count TotalSize Class Name
70dde918 1000 2062000 System.String
Total 1000 objects
它從capatured prod env,所以不能再現它。 – Jason
你能夠從答案中嘗試代碼嗎? –
是的,對於樣品的測試與我在環境中的測試相同,似乎問題發生在特殊情況下,順便說一句,轉儲的大小是7G。 – Jason