質問の情報は、問題の原因を明確に示すには不十分かもしれません。これは、私が再現できない、またはあなたのヒープが壊れているバージョン特有の問題かもしれません(実行!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