У меня возникли проблемы с доступом к темам Process
-Object.Cached Process.Threads вместо значения live
Похоже, что System.Diagnostics.Process.Threads
- это кешированная матрица вместо чтения при доступе. Это означает, что получение процесса другого приложения, сохранение его в течение жизненного цикла вашего приложения и доступ к его потокам периодически не даст ожидаемого результата.
Пример, который показывает, что новые нити не добавлены в этот список. Другой (неуправляемый) процесс порождает Темы в течение этого цикла:
var cachedProcess = System.Diagnostics.Process.GetProcessesByName("application").FirstOrDefault();
Thread.Sleep(5000);
while(true)
{
Console.WriteLine("Cached Thread Count: " + cachedProcess.Threads.Count);
var liveReadProcess = System.Diagnostics.Process.GetProcessesByName("application").FirstOrDefault();
Console.WriteLine("Live Thread Count: " + liveReadProcess.Threads.Count);
Console.WriteLine("");
Thread.Sleep(1000);
}
Выход:
Cached Thread Count: 3
Live Thread Count: 3
Cached Thread Count: 3
Live Thread Count: 4
Cached Thread Count: 3
Live Thread Count: 5
Cached Thread Count: 3
Live Thread Count: 6
Cached Thread Count: 3
Live Thread Count: 7
Я действительно ожидал, что доступ на cachedProcess.Threads
, равной liveReadProcess.Threads
, но это не так.
Есть ли способ кэшировать дескриптор процесса и обновить список тем, не имея прямого доступа к WinAPI?
Похоже, что ответа явно нет. Кэширование и живое обновление - это противоречивые варианты. –