32-разрядное .net-приложение, запущенное на 32-разрядной машине, столкнулось с OutOfMemoryException. Затем я сделал полный дамп памяти, и хотя с помощью WinDbg я могу убедиться, что используется много памяти, мне интересно, почему мы получаем OOMEs, хотя размер кучи GC, согласно выводу WinDbg для "! Eeheap -gc", равен только около 1 ГБ, поэтому похоже, что до 1,5 ГБ .net осталось достаточно места.
Вот части вывода:
0:000> !eeheap -gc
Number of GC Heaps: 1
generation 0 starts at 0x6a12ffcc
generation 1 starts at 0x6a12ffc0
generation 2 starts at 0x016a1000
ephemeral segment allocation context: (0x6a12ffd8, 0x6a12ffe4)
segment begin allocated size
016a0000 016a1000 0269ff64 0x00ffef64(16772964)
...
69130000 69131000 6a12ffd8 0x00ffefd8(16773080)
Large object heap starts at 0x026a1000
segment begin allocated size
026a0000 026a1000 03698a98 0x00ff7a98(16743064)
...
70020000 70021000 70a7d750 0x00a5c750(10864464)
Total Size 0x3c67abb4(1013427124)
------------------------------
GC Heap Size 0x3c67abb4(1013427124)
Ожидается ли это? Где будут остальные ~ 500 МБ?
Некоторые подробности:
- Размер самого файла дампа составляет 2.007.000.476 байт.
- Машина, на которой было запущено программное обеспечение, имела только 1 ГБ физической ОЗУ, но виртуальная память этой машины была настроена на увеличение до 3 ГБ (так что приложение должно иметь возможность увеличивать до 1,5 ГБ максимум до 32 бит). сетевые приложения).