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