C# 绘制图表时,绘图仪内存会增加,但不会减少
我使用DynamicDataDisplay.ChartPlotter绘制图表,每次重新绘制图表时,内存都会增加。因此,当我重新绘制200倍的图表时,我的应用程序的内存将增加到200mo 我试图手动执行GC.Collect(),但没有任何更改C# 绘制图表时,绘图仪内存会增加,但不会减少,c#,wpf,memory,mvvm,garbage-collection,C#,Wpf,Memory,Mvvm,Garbage Collection,我使用DynamicDataDisplay.ChartPlotter绘制图表,每次重新绘制图表时,内存都会增加。因此,当我重新绘制200倍的图表时,我的应用程序的内存将增加到200mo 我试图手动执行GC.Collect(),但没有任何更改 private ChartPlotter _courbeChartPlotter; public ChartPlotter CourbeChartPlotter { get { return _courbeChartP
private ChartPlotter _courbeChartPlotter;
public ChartPlotter CourbeChartPlotter
{
get { return _courbeChartPlotter; }
set
{
_courbeChartPlotter = value;
RaisePropertyChanged();
}
}
private static ListPointD3Cs _listeX = new ListPointD3Cs { new Point(0, 0) };
private static EnumerableDataSource<Point> dsX = new EnumerableDataSource<Point>(_listeX);
private int nbPoint = 0;
public void TakeMeasureTest()
{
nbPoint++;
_listeX.Add(new Point(nbPoint, GetRandomNumber(-1, 1)));
InitDotsCourbe(out dsX);
TraceCourbe(dsX);
}
public void InitDotsCourbe(out EnumerableDataSource<Point> dsX)
{
dsX = new EnumerableDataSource<Point>(_listeX);
dsX.SetXMapping(x => x.X);
dsX.SetYMapping(y => y.Y);
}
public ChartPlotter TraceCourbe(EnumerableDataSource<Point> dsX)
{
CourbeChartPlotter = new ChartPlotter();
ViewPortAxesRangeRestriction restr = new ViewPortAxesRangeRestriction
{
XRange = new DisplayRange(0, nbPoint + 1),
YRange = new DisplayRange(-2, 2)
};
CourbeChartPlotter.Viewport.Restrictions.Add(restr);
CourbeChartPlotter.AddLineGraph(dsX, Colors.Red, 2, "X");
return CourbeChartPlotter;
}
私人海图绘图仪\u库尔贝卡绘图仪;
公共海图绘图仪Courbechart绘图仪
{
获取{return\u courbeChartPlotter;}
设置
{
_Courbechart绘图仪=数值;
RaisePropertyChanged();
}
}
私有静态listpoint3cs _listeX=newlistpoint3cs{new Point(0,0)};
私有静态EnumerableDataSource dsX=新EnumerableDataSource(_listeX);
私有点=0;
公测
{
nbPoint++;
_Add(新点(nbPoint,GetRandomNumber(-1,1));
InitDotScorbe(输出dsX);
TraceCourbe(dsX);
}
public void initdotsburbe(out EnumerableDataSource dsX)
{
dsX=新的可枚举数据源(_listeX);
SetXMapping(x=>x.x);
设置映射(y=>y.y);
}
公共海图绘图仪TraceCourbe(可枚举数据源dsX)
{
CourbeChartPlotter=新图表绘图仪();
ViewPortAxesRangeRestriction=新的ViewPortAxesRangeRestriction
{
XRange=新的显示范围(0,nbPoint+1),
YRange=新的显示范围(-2,2)
};
CourbeChartPlotter.Viewport.Restrictions.Add(restr);
CourbeChartPlotter.AddLineGraph(dsX,彩色,红色,2,“X”);
返回Courbechart绘图仪;
}
我希望每次重画图表时,或者至少在我重新测量正常内存使用情况后,GC.Collect()时,内存不会增加。我假设您通过反复调用
TraceCourbe
方法重画图表,并重新分配CourbeChartPlotter
属性,然后显示该属性。在这种情况下,您可能会发生内存泄漏,因为某些内容(例如另一个属性、控件或事件订阅服务器)保留了对图表绘图仪
控件的引用,即使在重新分配控件并从理论上删除该控件之后(您的情况可能与类似)
您可以改为重新指定图表的数据源,如下所述