2017-07-25 3 views
3

は、遵守してください:対dumpheap文字列 - 報告された文字列のエントリと異なる長さの異なる数が

0:000> !dumpheap -min 0n100000 -mt 00007fff6c9c16b8 -live 
     Address    MT  Size 
0000009757e51038 00007fff6c9c16b8 116590  
0000009757e6d7c8 00007fff6c9c16b8 121392  
0000009757e8b218 00007fff6c9c16b8 160838  
0000009757eb2680 00007fff6c9c16b8 160826  
0000009757ed9ae0 00007fff6c9c16b8 179332  
0000009767e51038 00007fff6c9c16b8 121516  
0000009767e6eb08 00007fff6c9c16b8 129002  
0000009767e8e318 00007fff6c9c16b8 154506  
0000009767eb3ec8 00007fff6c9c16b8 153568  
0000009767ed96c8 00007fff6c9c16b8 212294  
0000009767f223e0 00007fff6c9c16b8 211356  
0000009767f55da0 00007fff6c9c16b8 157274  
0000009767f7c420 00007fff6c9c16b8 156336  
0000009767fa26f0 00007fff6c9c16b8 215062  
0000009767fd6f28 00007fff6c9c16b8 214124  
0000009777e71070 00007fff6c9c16b8 130594  

Statistics: 
       MT Count TotalSize Class Name 
00007fff6c9c16b8  16  2594610 System.String 
Total 16 objects 
0:000> !strings /n:100000 
Address   Gen Length Value 
--------------------------------------- 
0000009767ed96c8 LOH 106134 
       SET DEADLOCK_PRIORITY HIGH 

       DECLARE @CommittedCommitStateId INT = (Select PR... 
0000009767f223e0 LOH 105665 
       SET DEADLOCK_PRIORITY HIGH 

       DECLARE @CommittedCommitStateId INT = (Select PR... 
0000009767fa26f0 LOH 107518 
       SET DEADLOCK_PRIORITY HIGH 

       DECLARE @CommittedCommitStateId INT = (Select PR... 
0000009767fd6f28 LOH 107049 
       SET DEADLOCK_PRIORITY HIGH 

       DECLARE @CommittedCommitStateId INT = (Select PR... 
--------------------------------------- 
4 matching strings 

お知らせを、!dumpheapは16個のライブの文字列を報告すること、!stringsレポートのみ4.

のに対し、そしてそれらの長さは異なります。

なぜですか?

答えて

2

私は答えを見つけたと思います。

4弦は!stringsでとdumpheapの両方が使用されるコマンドによって、異なる長さを持っているが見つかりました:

Address   Length by !dumpheap Length by !strings   
0000009767ed96c8 212294    106134 
0000009767f223e0 211356    105665 
0000009767fa26f0 215062    107518 
0000009767fd6f28 214124    107049 

どこ:だから、ここに私の仮説がある

212294 = 106134 * 2 + 26 
211356 = 105665 * 2 + 26 
215062 = 107518 * 2 + 26 
214124 = 107049 * 2 + 26 

- !dumpheap生を報告します.NET文字列のサイズ - 文字の数を2倍にし、文字列オブジェクトの余分なフィールドを追加します。 !stringsコマンドは、文字列内の文字数を返します。

+1

うわー。私はそれを期待していませんでした。いい結論。 –

関連する問題