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 #?