C # распределение памяти - PullRequest
       25

C # распределение памяти

3 голосов
/ 23 апреля 2010
  • Может ли с помощью оператора new в c # произойти сбой (например, если требуется большой объем памяти)? -Solved-
  • А как это обнаружить? -Solved-
  • Какие еще ошибки может выдать новый оператор?

Спасибо

Ответы [ 4 ]

9 голосов
/ 23 апреля 2010

Если new завершится неудачей, будет выдано OutOfMemoryException .Кроме того, сам конструктор может выдавать любое исключение в зависимости от реализации.

Из документации MSDN для OutOfMemoryException:

Следующие промежуточные инструкции Microsoft (MSIL) выдают OutOfMemoryException:

  • box

  • newarr

  • newobj

4 голосов
/ 23 апреля 2010

Оператор new, который вызывает конструктор, может выдать любое исключение, которое вы можете себе представить. Например, если внутри конструктора, который пытается выделить что-то большое, и терпит неудачу, то это исключение может быть перехвачено и повторно вызвано как нечто более экзотическое.

Конечно, в тот момент, когда вы начинаете видеть нехватку памяти, вы, вероятно, должны считать процесс смертельно больным и избавить его от страданий как можно скорее.

Конструкторы также могут, несмотря на все слухи об обратном, возвращать null даже для классов - но это крайний крайний случай, граничащий с патологическим.

1 голос
/ 23 апреля 2010

Да, это бросает OutOfMemoryException

1 голос
/ 23 апреля 2010

Может ли произойти сбой при использовании оператора new в c # (если для этого требуется большой объем памяти)?

Да. (Ресурс, который вы, вероятно, исчерпаете, это адресное пространство, а не память как таковая.)

А как это обнаружить?

Я не понимаю вопроса.

...