.NET 4.x Создание графика без утечки памяти - C#
Формулировка задачи:
Добрый день уважаемые! Встретился с такой проблемой: Нужно построить график, да не простой, а за 6 месяцев. График динамичный и получает данные постоянно из вне (фоновый поток).График строится ограничивается в 30 минут(интервал таймера равен 1000) всё путём! Но есть одна загвоздка, где то происходит утечка памяти. Код банальный и простой. Создаем график, указываем настройки и параметры, строим график (создаем точки и удаляем старые)
где K1-K8 - динамичные данные. ops - 1 секунда по оси X.
После 3ех дней работы программы она ест уже больше 3ех гигов памяти. Я предполагаю, что точки остаются в памяти и не удаляются. Прошу помогите, пробовал стирать графики через Points.Clear() - один фиг память не освобождается. Я новичок и эта тема моя первая, так что если не туда написал заранее прошу прощения! Если есть какие - либо идеи как можно отображать график не за 30 минут, а за 2 месяца что бы не нагружался комп - прошу скажите как логикой (программой я напишу) Был вариант сбрасывать всё в отдельный файл, но постоянно его считывать когда там миллионы записей - не камельфо наверное.
Листинг программы
- 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
- {
- }
- }
Решение задачи: «.NET 4.x Создание графика без утечки памяти»
textual
Листинг программы
- void UpdateEveryTime()
- {
- if (Points.Count > 100500) Points= Points.GetRange(Points.Count - 1000, 1000);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д