Другая возможность состоит в том, что программа пыталась выделить один блок памяти размером более 2 гигабайт, что является ограничением .NET. Это может произойти при добавлении объектов в коллекцию (чаще всего Dictionary
или HashSet
, но также List
или любой другой коллекции, которая автоматически увеличивается.)
Dictionary
и HashSet
делают это часто, если вы пытаетесь положить в коллекцию более 47 миллионов предметов. Хотя коллекция может содержать около 89,5 миллионов, алгоритм, который увеличивает коллекцию, удваивает ее. Если вы начинаете с пустого Dictionary
и начинаете добавлять предметы, коллекция удваивается несколько раз, пока не достигнет примерно 47 миллионов. Затем он снова пытается удвоиться и бросает OutOfMemoryException
.
Способ избежать исключения состоит в том, чтобы предварительно выделить коллекцию так, чтобы ее емкость была достаточно большой, чтобы вместить столько элементов, сколько вы ожидаете поместить в нее.