Как Избавиться От Ошибки Переполнения Памяти?

Тема в разделе ".NET - WinForms", создана пользователем tumanovalex, 18 сен 2014.

  1. tumanovalex

    tumanovalex Active Member

    Регистрация:
    17 июн 2009
    Сообщения:
    26
    Симпатии:
    0
    Считываю данные short из файла 29 мб и затем вывожу их на график:
    Код (C++):
         private void file_read(string file_name)
    {
    try
    {
    reader = new BinaryReader(new FileStream(file_name, FileMode.Open, FileAccess.Read, FileShare.Read));
    }
    catch (FileNotFoundException e)
    {
    MessageBox.Show(e.Message.ToString(), "Ошибка!!!", System.Windows.Forms.MessageBoxButtons.OK,
    System.Windows.Forms.MessageBoxIcon.Error);
    Environment.Exit(1);
    }
    long file_size = reader.BaseStream.Seek(0, SeekOrigin.End);
    num_elem = file_size / sizeof(Int16);
    reader.BaseStream.Seek(0, SeekOrigin.Begin);
    data = new short[num_elem];
    for (int i = 0; i < num_elem; i++)
    {
    data[i] = reader.ReadInt16();
    }
    reader.Close();
    }

    private void file_show(Int16[] data)
    {
    s = new Series("Sources");
    s.ChartType = SeriesChartType.Spline;
    s.Color = Color.Red;
    for (long i = 0; i < num_elem; i++)
    {
    s.Points.AddXY(i, data[i]); // Ошибка
    }
    chart1.Series.Add(s);
    chart1.Visible = true;
    chart1.Show();
    this.Refresh();
    }
    В строке s.Points.AddXY(i, data) возникает ошибка: "An unhandled exception of type 'System.OutOfMemoryException' occurred in System.Windows.Forms.DataVisualization.dll. Вроде бы файл не такой огромный. На компьютере в разделе Система размер ОЗУ оценивается как 3 gb и доступно 2,7 gb. Подскажите, пожалуйста, как исправить программу. Проект (без файла данных) прилагаю, файл данных 29 мб разместил на https://yadi.sk/d/rAf-a3_DbYBYz
     

    Вложения:

    • TestCs.zip
      Размер файла:
      10,7 КБ
      Просмотров:
      1
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Судя по всему, вы пытаетесь добавить 14 миллионов точек на график, а каждая точка - это не просто число, а еще и определенный объем ресурсов, требуемых для отображения в чарте. Думаю, тут есть смыл хорошенько задуматься: вам реально нужно все эти точки на графике нарисовать? Ибо слабо себе представляю монитор, на котором их все можно будет разглядеть.

    Необходимо, в общем, пересмотреть подход к визуализации. Варианты с ходу:
    1. показывать только фрагмент графика (скажем, тысячу точек) с возможностью скроллинга к следующему/предыдущему фрагменту;
    2. отображать некоторую аппроксимацию вашей последовательности с меньшим количеством точек. Алгоритм построения такой аппроксимации надо хорошенько обмозговать; он будет зависеть от ваших данных.
     
  3. tumanovalex

    tumanovalex Active Member

    Регистрация:
    17 июн 2009
    Сообщения:
    26
    Симпатии:
    0
    Спасибо за советы, попробую.
     
Загрузка...

Поделиться этой страницей