На моей машине (XP, 64) рабочий процесс ASP.net (w3wp.exe) всегда запускается с 5,5 ГБ зарезервированной виртуальной памяти. Это происходит независимо от того, какое веб-приложение оно размещает (это может быть что угодно, даже пустая веб-страница в aspx).
Этот большой старый кусок виртуальной памяти зарезервирован в момент запуска процесса, так что это не постепенная утечка памяти какого-либо рода.
Некоторые наблюдения за windbg показывают, что память является вопросом Private, Reserved и RegionUsageIsVAD, что указывает на то, что это может быть работа кого-то, вызывающего VirtualAlloc. Это также показывает, что рассматриваемая память выделена / зарезервирована в 4 больших блока по 1 ГБ каждый и несколько меньших (1/4 ГБ каждый).
Итак, я думаю, мне нужно выяснить, кто вызывает VirtualAlloc и резервирует всю эту память. Как мне это сделать?
Присоединить отладчик к процессу до выделения памяти довольно сложно, поскольку w3wp.exe - это процесс, запускаемый svchost.exe (то есть фильтром IIS / ASP.Net), и если я пытаюсь запустить его самостоятельно чтобы отладить его, он просто закрывается без всего этого обильного резервирования памяти. Кроме того, параметры командной строки недопустимы, если я их повторно использую (что имеет смысл, потому что это канал, созданный вызывающим процессом).
Я могу прикрепить его к процессу после факта (именно так я нашел области памяти, о которых идет речь), но я не уверен, что в этот момент можно определить, кто что выделил.