.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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д