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