2015-11-27 6 views
0

Есть ли способ увидеть содержимое таблицы строк в запущенном .NET-приложении?Могу ли я увидеть содержимое таблицы строк в запущенном процессе?

Я хочу сравнить консольное приложение с ванильными строковыми конкатенациями и одним с помощью построителя строк.

+0

@stuartd * Я думаю *, что речь идет о строковых литералов в сборке, я хотел строки кэшированных во время выполнения этих рамок. – BanksySan

+0

«Обычная среда выполнения языков сохраняет хранилище строк, поддерживая таблицу, называемую междоменным пулом, которая содержит единственную ссылку на каждую строку уникального литерала, объявленную или создаваемую программно в вашей программе. Следовательно, экземпляр литерала с конкретным значением только существует один раз в системе ». - https://msdn.microsoft.com/en-us/library/system.string.intern.aspx – stuartd

ответ

2

Вы можете использовать ClrMD для присоединения к процессу и извлечения информации из него. Что-то вдоль линий должно работать:

var proc = Process.GetProcessesByName("myapp.exe").FirstOrDefault(); 
using (var target = DataTarget.AttachToProcess(proc.Id, 1000)) 
{ 
    var runtime = target.ClrVersions[0].CreateRuntime(); 
    var heap = runtime.GetHeap(); 
    foreach (var obj in heap.EnumerateObjectAddresses()) 
    { 
     var type = heap.GetObjectType(obj); 
     if (type.Name == "System.String") 
     { 
      var value = (string)type.GetValue(obj); 
      // Write value to disk or something. 
     } 
    } 
}