Ошибка 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); // Далее без изменений ...
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д