Ошибка OutOfMemoryException - C#
Формулировка задачи:
Существует бинарный файл, который я создал сам. Где первые 4 бита это количество элементов в каждом массиве, далее поэлеменнтно записаны 4 массива.
Файл получился довольно громоздким. Размер его около 800 метров.
И при считывании:
Вылетает ошибка OutOfMemoryException, не хватка памяти, как избежать подобное? не подскажите?
public static void Save_bin(List<double> s1, List<double> s2, List<double> s3, List<double> s4)
{
using (BinaryWriter writer = new BinaryWriter(File.Open(Setting.getPath() + Setting.getNamefile()+".dat", FileMode.Create)))
{
writer.Write(Convert.ToInt32(s1.Count));
for (int i = 0; i < s1.Count; i++)
{
writer.Write(s1[i]);
writer.Write(s2[i]);
writer.Write(s3[i]);
writer.Write(s4[i]);
}
}
}
}public static void Read_bin(List<double> s1, List<double> s2, List<double> s3, List<double> s4, string path)
{
int count;
using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
{
count = reader.ReadInt32();
for (int i = 0; i < count; i++)
{
s1.Add(reader.ReadDouble());
s2.Add(reader.ReadDouble());
s3.Add(reader.ReadDouble());
s4.Add(reader.ReadDouble());
}
}
}Решение задачи: «Ошибка OutOfMemoryException»
textual
Листинг программы
double[] input_signal1, input_signal2, input_signal3, input_signal4;
FileWork.Read_bin(out input_signal1, out input_signal2, out input_signal3, out nput_signal4, Tb_path.Text);
GraphPane pane1 = chanel_1.GraphPane;
GraphPane pane2 = chanel_2.GraphPane;
GraphPane pane3 = chanel_3.GraphPane;
GraphPane pane4 = chanel_4.GraphPane;
pane1.CurveList.Clear();
pane2.CurveList.Clear();
pane3.CurveList.Clear();
pane4.CurveList.Clear();
// Заменил double на int для экономмии памяти
int[] x = new int[input_signal1.Count];
for (int i = 0; i < input_signal1.Count; i++) x[i] = i;
LineItem myCurve1 = pane1.AddCurve("test", x, input_signal1, Color.Blue, SymbolType.None);
LineItem myCurve2 = pane2.AddCurve("test", x, input_signal2, Color.Blue, SymbolType.None);
LineItem myCurve3 = pane3.AddCurve("test", x, input_signal3, Color.Blue, SymbolType.None);
LineItem myCurve4 = pane4.AddCurve("test", x, input_signal4, Color.Blue, SymbolType.None);
// Далее без изменений ...