.NET 4.x Создание графика без утечки памяти - C#

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

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

Добрый день уважаемые! Встретился с такой проблемой: Нужно построить график, да не простой, а за 6 месяцев. График динамичный и получает данные постоянно из вне (фоновый поток).График строится ограничивается в 30 минут(интервал таймера равен 1000) всё путём! Но есть одна загвоздка, где то происходит утечка памяти. Код банальный и простой. Создаем график, указываем настройки и параметры, строим график (создаем точки и удаляем старые)
private void Form1_Load(object sender, EventArgs e)
        {
            chart1.ChartAreas[0].AxisX.ScaleView.Zoom(0, 100);
            chart1.ChartAreas[0].CursorX.IsUserEnabled = true;
            chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
            chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
 
            chart1.ChartAreas[0].AxisY.ScaleView.Zoom(0, 24);
            chart1.ChartAreas[0].CursorY.IsUserEnabled = true;
            chart1.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
            chart1.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
}
 
private void timer4_Tick(object sender, EventArgs e)
        {
            gogo++;
 
            try { 
            for (int gg = 0; gg < 1; gg++)
            {
                
                chart1.Series[0].Points.AddXY(ops, K1);
                chart1.Series[1].Points.AddXY(ops, K2);
                chart1.Series[2].Points.AddXY(ops, K3);
                chart1.Series[3].Points.AddXY(ops, K4);
                chart1.Series[4].Points.AddXY(ops, K5);
                chart1.Series[5].Points.AddXY(ops, K6);
                chart1.Series[6].Points.AddXY(ops, K7);
                chart1.Series[7].Points.AddXY(ops, K8);
            }
 
chart1.ChartAreas[0].AxisX.Minimum = gogo - 1800;
            chart1.ChartAreas[0].AxisX.Maximum = gogo;
            chart1.ChartAreas[0].AxisY.Minimum = -2;
            chart1.ChartAreas[0].AxisY.Maximum = 22;
 
 if (gogo > 10)
            {chart1.Series[0].Points.RemoveAt(gogo - 10);
                chart1.Series[0].Points.AddXY(gogo, K1);
                  
                chart1.Series[1].Points.RemoveAt(gogo - 10);
                chart1.Series[1].Points.AddXY(gogo, K2);
 
                chart1.Series[2].Points.RemoveAt(gogo - 10);
                chart1.Series[2].Points.AddXY(gogo, K3);
 
                chart1.Series[3].Points.RemoveAt(gogo - 10);
                chart1.Series[3].Points.AddXY(gogo, K4);
 
                chart1.Series[4].Points.RemoveAt(gogo - 10);
                chart1.Series[4].Points.AddXY(gogo, K5);
 
                chart1.Series[5].Points.RemoveAt(gogo - 10);
                chart1.Series[5].Points.AddXY(gogo, K6);
 
                chart1.Series[6].Points.RemoveAt(gogo - 10);
                chart1.Series[6].Points.AddXY(gogo, K7);
 
                chart1.Series[7].Points.RemoveAt(gogo - 10);
                chart1.Series[7].Points.AddXY(gogo, K8);
}
catch
            { 
            }
}
где K1-K8 - динамичные данные. ops - 1 секунда по оси X. После 3ех дней работы программы она ест уже больше 3ех гигов памяти. Я предполагаю, что точки остаются в памяти и не удаляются. Прошу помогите, пробовал стирать графики через Points.Clear() - один фиг память не освобождается. Я новичок и эта тема моя первая, так что если не туда написал заранее прошу прощения! Если есть какие - либо идеи как можно отображать график не за 30 минут, а за 2 месяца что бы не нагружался комп - прошу скажите как логикой (программой я напишу) Был вариант сбрасывать всё в отдельный файл, но постоянно его считывать когда там миллионы записей - не камельфо наверное.

Решение задачи: «.NET 4.x Создание графика без утечки памяти»

textual
Листинг программы
void UpdateEveryTime()
{
      if (Points.Count > 100500) Points= Points.GetRange(Points.Count - 1000, 1000);
}

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


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

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

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