Comments 15
Просто выделить память для создания этих исключений в момент когда они уже произошли, мягко говоря сложновато.
Автор вроде все объяснил в предпоследнем абзаце.Зачем париться с резервированием памяти, когда можно заранее подготовить несколько объектов? А если StackOverflow будет, как создавать? Абсолютно нормальное поведение, хотя весь полезный смысл статьи ложится в 2-3 предложения.
На последнем скриншоте видно целых 6 исключений. Это ж ни в какие ворота!
System.Exception выделяется потому, что является предком для всех остальных, а ThreadAbortException две штуки — два потока в приложении?
На самом деле потоков куда больше
1. Main Thread
2. GC Thread
3. Finalizer Thread IIRC
ах да, если еще не вырубить Visual Studio Hosting Process еще +1
1. Main Thread
2. GC Thread
3. Finalizer Thread IIRC
ах да, если еще не вырубить Visual Studio Hosting Process еще +1
В своем исключительно однопоточном простом приложении сейчас насчитал четыре потока. Сборка debug, но vshost не запущен.
Был уверен, что GC выполняется в пуле потоков фреймворка…
Был уверен, что GC выполняется в пуле потоков фреймворка…
CLR всегда пробрасывает ThreadAbortException при закрытии потока
Андерс Хейлсберг, один из создателей C#, использовал этот приём ещё в Delphi, который он тоже разрабатывал.
Возможно, в Java (Hotspot) OutOfMemoryError не создаётся при старте (во всяком случае, breakpoint-ы на конструторах не срабатывают).
Возможно, в Java (Hotspot) OutOfMemoryError не создаётся при старте (во всяком случае, breakpoint-ы на конструторах не срабатывают).
Чтобы использовать SOS.dll совсем необязательно ставить WinDBG (штука сама по себе полезная, но не очень часто), можно просто нажать паузу во время отладки в студии и в Immediate window ввести те же команды.
Очевидно, но факт
Это обычная практика. К примеру, в стандартном RTL msvc — при нехватке памяти кидается std::bad_alloc, который не выделяется в куче:
if (_callnewh(size) == 0)
{ // report no memory
static const std::bad_alloc nomem;
_RAISE(nomem);
}
Sign up to leave a comment.
В каждом .net приложении резервируется память для трех исключений