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

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

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

Добрый день уважаемые! Встретился с такой проблемой: Нужно построить график, да не простой, а за 6 месяцев. График динамичный и получает данные постоянно из вне (фоновый поток).График строится ограничивается в 30 минут(интервал таймера равен 1000) всё путём! Но есть одна загвоздка, где то происходит утечка памяти. Код банальный и простой. Создаем график, указываем настройки и параметры, строим график (создаем точки и удаляем старые)
Листинг программы
  1. private void Form1_Load(object sender, EventArgs e)
  2. {
  3. chart1.ChartAreas[0].AxisX.ScaleView.Zoom(0, 100);
  4. chart1.ChartAreas[0].CursorX.IsUserEnabled = true;
  5. chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
  6. chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
  7. chart1.ChartAreas[0].AxisY.ScaleView.Zoom(0, 24);
  8. chart1.ChartAreas[0].CursorY.IsUserEnabled = true;
  9. chart1.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
  10. chart1.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
  11. }
  12. private void timer4_Tick(object sender, EventArgs e)
  13. {
  14. gogo++;
  15. try {
  16. for (int gg = 0; gg < 1; gg++)
  17. {
  18. chart1.Series[0].Points.AddXY(ops, K1);
  19. chart1.Series[1].Points.AddXY(ops, K2);
  20. chart1.Series[2].Points.AddXY(ops, K3);
  21. chart1.Series[3].Points.AddXY(ops, K4);
  22. chart1.Series[4].Points.AddXY(ops, K5);
  23. chart1.Series[5].Points.AddXY(ops, K6);
  24. chart1.Series[6].Points.AddXY(ops, K7);
  25. chart1.Series[7].Points.AddXY(ops, K8);
  26. }
  27. chart1.ChartAreas[0].AxisX.Minimum = gogo - 1800;
  28. chart1.ChartAreas[0].AxisX.Maximum = gogo;
  29. chart1.ChartAreas[0].AxisY.Minimum = -2;
  30. chart1.ChartAreas[0].AxisY.Maximum = 22;
  31. if (gogo > 10)
  32. {chart1.Series[0].Points.RemoveAt(gogo - 10);
  33. chart1.Series[0].Points.AddXY(gogo, K1);
  34. chart1.Series[1].Points.RemoveAt(gogo - 10);
  35. chart1.Series[1].Points.AddXY(gogo, K2);
  36. chart1.Series[2].Points.RemoveAt(gogo - 10);
  37. chart1.Series[2].Points.AddXY(gogo, K3);
  38. chart1.Series[3].Points.RemoveAt(gogo - 10);
  39. chart1.Series[3].Points.AddXY(gogo, K4);
  40. chart1.Series[4].Points.RemoveAt(gogo - 10);
  41. chart1.Series[4].Points.AddXY(gogo, K5);
  42. chart1.Series[5].Points.RemoveAt(gogo - 10);
  43. chart1.Series[5].Points.AddXY(gogo, K6);
  44. chart1.Series[6].Points.RemoveAt(gogo - 10);
  45. chart1.Series[6].Points.AddXY(gogo, K7);
  46. chart1.Series[7].Points.RemoveAt(gogo - 10);
  47. chart1.Series[7].Points.AddXY(gogo, K8);
  48. }
  49. catch
  50. {
  51. }
  52. }
где K1-K8 - динамичные данные. ops - 1 секунда по оси X. После 3ех дней работы программы она ест уже больше 3ех гигов памяти. Я предполагаю, что точки остаются в памяти и не удаляются. Прошу помогите, пробовал стирать графики через Points.Clear() - один фиг память не освобождается. Я новичок и эта тема моя первая, так что если не туда написал заранее прошу прощения! Если есть какие - либо идеи как можно отображать график не за 30 минут, а за 2 месяца что бы не нагружался комп - прошу скажите как логикой (программой я напишу) Был вариант сбрасывать всё в отдельный файл, но постоянно его считывать когда там миллионы записей - не камельфо наверное.

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

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

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


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

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

15   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы