2016-09-05 13 views
-1

「!dumpheap -min 62 -max 64」コマンドを実行すると、次の結果が見つかりました。文字列の数は43,149,740ですが、合計サイズはわずか5,146,310バイトですだから、全体のサイズは間違っていますよね?!dumpheapの結果が間違っています

Statistics: 
       MT Count TotalSize Class Name 
00007fff0faaf518  1   100 System.Runtime.Serialization.Formatters.Binary.InternalPrimitiveTypeE[] 
00007fff0fb22c98  2   200 System.Int16[] 
00007fff0fb06888  36   3532 System.Byte[] 
00007fff0fb02090  174  17124 System.Char[] 
00007fff0fb03920  545  54500 System.Int32[] 
00007fff0fb00e08 **43149740**  **5146310** System.String 
Total 43150498 objects 
+0

それからcapatured prod env、そうすることはできません。 – Jason

+0

答えからコードを試すことができましたか? –

+0

はい、サンプルのテストは私の環境と同じですが、問題は特殊な状況で起きているようですが、ダンプのサイズは7Gです。 – Jason

答えて

1

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