C# Chart控件使用后怎么释放资源

shenma11111 2014-09-02 09:47:27
项目中用了Chart控件显示折线图,折线图一般5s刷新一次(用的Timer实现的刷新,每次刷新其实都是重新绑定下Chart),发现每次刷新都会多占用70~100M内存,刷新一分钟占内存就快1G了,这样问题就比较严重了。怎么让每次刷新时先释放资源。或者不让Chart占用太多资源?
...全文
372 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenma11111 2014-09-02
  • 打赏
  • 举报
回复
代码贴出来,每次刷新Timer事件要掉这个关于Chart的代码,请问代码还有哪里可以优化,是哪一步产生的内存占用?怎么解决? 坐等大神出现

 this.activationChart.ChartAreas.Clear();
                        this.activationChart.ChartAreas.Add("area");
                        this.activationChart.Series.Clear();
                        this.activationChart.Series.Add("Line");

                        ChartArea area = this.activationChart.ChartAreas[0];
                        area.AxisX.MajorGrid.LineWidth = 0;

                        //set Area style
                        area.BackHatchStyle = ChartHatchStyle.Cross;

                        //set AxisX
                        double subMin = subTimeMin(a.EndTime, a.StartTime);//算时间差的方法,对性能应该没什么影响,所以就不贴了
                        double intervalmin = subMin / 20;
                        area.AxisX.Maximum = subMin;
                        area.AxisX.Minimum = 0;
                        area.AxisX.Interval = intervalmin;
                        area.AxisX.Title = "Time(in minutes)";

                        //set AxisY
                        int maxPersonCount = 0;

                        if (apList.Count() < 5)
                            maxPersonCount = 5;
                        else
                        {
                            if (apList.Count() % 5 > 0)
                                maxPersonCount = ((apList.Count() / 5) + 1) * 5;
                            else
                                maxPersonCount = apList.Count();
                        }
                        area.AxisY.Maximum = maxPersonCount;
                        area.AxisY.Minimum = 0;
                        area.AxisY.Interval = maxPersonCount / 5;
                        area.AxisY.Title = "Strength";

                        Series series = this.activationChart.Series[0];
                        series.ChartType = SeriesChartType.Line;
                        series.BorderWidth = 1;
                        series.ShadowOffset = 1;
                        series.Color = System.Drawing.Color.Black;

                        int personCount = 0;
                        for (int i = 0; i <= 20; i++)
                        {
                            DateTime? minTime = a.StartTime.GetValueOrDefault().AddMinutes(intervalmin * (i - 1));
                            DateTime? morTime = a.StartTime.GetValueOrDefault().AddMinutes(intervalmin * i);

                            if (i == 0)
                            {
                                var epList = .....(忽略取一个List代码).ToList();
                                if (epList  != null && epList .Count > 0)
                                {
                                    personCount += epList .Count;
                                    series.Points.AddXY(0, personCount);
                                    series.Points[i].ToolTip = (personCount).ToString();
                                }
                                else
                                {
                                    series.Points.AddXY(0, 0);
                                    series.Points[i].ToolTip = (0).ToString();
                                }
                            }
                            else
                            {
                                var tpList =忽略取List的方法.ToList();
                                if (tpList != null)
                                {
                                    personCount += tpList .Count;
                                }

                                series.Points.AddXY(i * intervalmin, personCount);
                                series.Points[i].ToolTip = (personCount).ToString();

                                if (personCount == ap.Count() || a.StartTime.GetValueOrDefault().AddMinutes(intervalmin * i) > DateTime.Now)
                                    break;
                            }
                        }

                        //set series style
                        series.ChartType = SeriesChartType.Line;
                        series.MarkerStyle = MarkerStyle.Square;
                        series.MarkerColor = System.Drawing.Color.White;
                        series.MarkerSize = 5;
shenma11111 2014-09-02
  • 打赏
  • 举报
回复
引用 1 楼 powertoolsteam 的回复:
请问,是什么Chart控件? 微软自带的还是 ComponentOne C1Chart
微软自带的,在ToolBox中Data分类下的Chart
shenma11111 2014-09-02
  • 打赏
  • 举报
回复
微软自带的,在ToolBox中Data分类下的Chart
  • 打赏
  • 举报
回复
请问,是什么Chart控件? 微软自带的还是 ComponentOne C1Chart

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧