Ошибка OutOfMemoryException - C#

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

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

Существует бинарный файл, который я создал сам. Где первые 4 бита это количество элементов в каждом массиве, далее поэлеменнтно записаны 4 массива.
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]);
                    }                                      
                 }
               
            }
            
        }
Файл получился довольно громоздким. Размер его около 800 метров. И при считывании:
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, не хватка памяти, как избежать подобное? не подскажите?

Решение задачи: «Ошибка 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);
 
// Далее без изменений ...

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


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

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

15   голосов , оценка 4.333 из 5
Похожие ответы