询问者
c# 调用函数后内存没有得到释放

常规讨论
-
用WPF随便画一个按钮,然后让点击该按钮时候执行一个简单运算,查看内存的时候,发现内存只会一路上涨而不会释放,这是为什么呢?
public partial class MainWindow : Window { List<Point> a; public MainWindow() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { a = genValue(); } private List<Point> genValue() { List<Point> result = new List<Point>(); for (int i = 0; i < 10000; i++) { result.Add(new Point() { X = i, Y = i * i }); } return result; } }
全部回复
-
我尝试了一下GC,不过没有发现较大的改善。单纯的List而言,.net本身的垃圾回收机制应该还是发挥作用的,但如果我用WPF Toolkit Chart进行绘图,将上述的List载入到绘图里边,这个内存占用量就比较庞大了,而且就一直不释放,不停的load,最终程序会直接出错。
<Window x:Class="LoadLine2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dc="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:dv="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:cp="clr-namespace:System.Windows.Controls.DataVisualization.Charting.Primitives;assembly=System.Windows.Controls.DataVisualization.Toolkit" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <Style x:Key="MyDataPointStyle" TargetType="dc:LineDataPoint"> <Setter Property="Background" Value="Blue"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="dc:LineDataPoint"/> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid> <dc:Chart Name="toolkitChart" Background="Transparent"> <dc:Chart.Series> <dc:LineSeries Name="LineCreate" ItemsSource="{Binding}" IndependentValueBinding="{Binding X}" DependentValueBinding="{Binding Y}" DataPointStyle="{StaticResource MyDataPointStyle}"> </dc:LineSeries> </dc:Chart.Series> </dc:Chart> <Button Content="Load" Height="27" Margin="19,13,0,0" Name="loadBtn" Width="71" Click="loadBtn_Click" /> </Grid> </Window>
点击Load时候载入图像
private void button1_Click(object sender, RoutedEventArgs e) { a = genValue(); LineCreate.ItemsSource = a; }
我尝试过重载图像的时候将能清空的值尽量清空,也尝试过GC的一些基本操作,但是没有取得多少效果。
不知道这是否是toolkit chart本身的内存回收有问题,还是我的操作有失误的地方。如果本身有问题,该如何去弥补呢?
谢谢
-
- 已编辑 HeroHua0509 2012年9月22日 12:29