When the managed heap becomes full, the garbage collector asks the operating system for more virtual memory. When this request fails, the
OutOfMemoryException is thrown. This exception cannot be caught by application code and terminates your program on the spot. One reason you cannot catch the exception is that it takes immense powers to deal with such an exception without allocating more memory while doing so. In addition, no guarantees are made about the execution of
finally blocks and finalizers in out-of-memory conditions because they may allocate memory on their own. Luckily, outstanding open handles to Win32 resources will be closed either way because the operating system takes care of this upon program termination. ...