C # сериализует большой массив на диск

У меня есть очень большой график, хранящийся в одномерном массиве (около 1,1 ГБ), который я могу хранить в памяти на моей машине под управлением Windows XP с 2 ГБ оперативной памяти и 2 ГБ виртуальной памяти. Я могу сгенерировать весь набор данных в памяти, однако, когда я пытаюсь сериализовать его на диск, используяBinaryFormatter, размер файла достигает около 50 МБ, а затем дает мне исключение из-за нехватки памяти. Код, который я использую для написания этого кода, такой же, какой я использую среди всех моих небольших проблем:

StateInformation[] diskReady = GenerateStateGraph();
BinaryFormatter bf = new BinaryFormatter();
using (Stream file = File.OpenWrite(@"C:\temp\states.dat"))
{
    bf.Serialize(file, diskReady);
}

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

У меня действительно есть 3 вопроса:

Есть ли более надежный способ записи большого набора данных на диск. Я предполагаю, что вы можете определить большие, например, когда размер набора данных приближается к объему доступной памяти, хотя я не уверен, насколько это точно.

Должен ли я перейти на более ориентированный на базу данных подход?

Может кто-нибудь указать мне литературу о чтении частей большого набора данных из файла на диске в C #?

Ответы на вопрос(3)

Ваш ответ на вопрос