Ошибка OutOfMemoryException - C#

Узнай цену своей работы

Формулировка задачи:

Существует бинарный файл, который я создал сам. Где первые 4 бита это количество элементов в каждом массиве, далее поэлеменнтно записаны 4 массива.
Листинг программы
  1. public static void Save_bin(List<double> s1, List<double> s2, List<double> s3, List<double> s4)
  2. {
  3. using (BinaryWriter writer = new BinaryWriter(File.Open(Setting.getPath() + Setting.getNamefile()+".dat", FileMode.Create)))
  4. {
  5. writer.Write(Convert.ToInt32(s1.Count));
  6. for (int i = 0; i < s1.Count; i++)
  7. {
  8. writer.Write(s1[i]);
  9. writer.Write(s2[i]);
  10. writer.Write(s3[i]);
  11. writer.Write(s4[i]);
  12. }
  13. }
  14. }
  15. }
Файл получился довольно громоздким. Размер его около 800 метров. И при считывании:
Листинг программы
  1. public static void Read_bin(List<double> s1, List<double> s2, List<double> s3, List<double> s4, string path)
  2. {
  3. int count;
  4. using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
  5. {
  6. count = reader.ReadInt32();
  7. for (int i = 0; i < count; i++)
  8. {
  9. s1.Add(reader.ReadDouble());
  10. s2.Add(reader.ReadDouble());
  11. s3.Add(reader.ReadDouble());
  12. s4.Add(reader.ReadDouble());
  13. }
  14. }
  15. }
Вылетает ошибка OutOfMemoryException, не хватка памяти, как избежать подобное? не подскажите?

Решение задачи: «Ошибка OutOfMemoryException»

textual
Листинг программы
  1. double[] input_signal1, input_signal2, input_signal3, input_signal4;
  2. FileWork.Read_bin(out input_signal1, out input_signal2, out input_signal3, out nput_signal4, Tb_path.Text);
  3.  
  4. GraphPane pane1 = chanel_1.GraphPane;
  5. GraphPane pane2 = chanel_2.GraphPane;
  6. GraphPane pane3 = chanel_3.GraphPane;
  7. GraphPane pane4 = chanel_4.GraphPane;
  8. pane1.CurveList.Clear();
  9. pane2.CurveList.Clear();
  10. pane3.CurveList.Clear();
  11. pane4.CurveList.Clear();
  12.  
  13. // Заменил double на int для экономмии памяти
  14. int[] x = new int[input_signal1.Count];
  15. for (int i = 0; i < input_signal1.Count; i++) x[i] = i;
  16.  
  17. LineItem myCurve1 = pane1.AddCurve("test", x, input_signal1, Color.Blue, SymbolType.None);
  18. LineItem myCurve2 = pane2.AddCurve("test", x, input_signal2, Color.Blue, SymbolType.None);
  19. LineItem myCurve3 = pane3.AddCurve("test", x, input_signal3, Color.Blue, SymbolType.None);
  20. LineItem myCurve4 = pane4.AddCurve("test", x, input_signal4, Color.Blue, SymbolType.None);
  21.  
  22. // Далее без изменений ...

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы