我在我的应用程序中使用MVVM light。 我不知道我可以释放一个ObservableCollection这里的记忆是我的ViewModel:ObservableCollection内存泄漏
ObservableCollection<string> collTest = new ObservableCollection<string>();
public VMTest()
{
for (int x = 0; x < 100000; x++)
collTest.Add(String.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}", x, x, x, x, x, x, x, x, x, x));
}
public ICommand DeleteColl { get { return new RelayCommand(DeleteCollExecute, CanDeleteCollExecute); } }
bool CanDeleteCollExecute() { return true; }
void DeleteCollExecute()
{
collTest.Clear();
}
的观点:
<Grid>
<StackPanel>
<Button Click="Button_Click"
Name="bt_test"
Content="New VMTest" />
<Button Content="delete ObservableCollection"
Command="{Binding DeleteColl}" />
</StackPanel>
</Grid>
后面的代码:
public TestMemoryLeak()
{
InitializeComponent();
this.DataContext = new VMTest();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.DataContext = new VMTest();
}
当我点击“bt_test”它会为我的视图创建一个新的viewModel。我有另一个按钮来清除observableCollection。
如果我分配一个新的viewModel或者如果我清除ObsevableCollection,内存永远不会释放。 在这个例子中,每次点击“bt_test”需要15Mo。在我的申请中,每次需要50兆,我在测试中达到了1.4Go的消耗...(我停止了测试)
你能帮我吗?
编辑:
调查后,似乎这是我的DAO有罪,这可能是当我复制ObervableCollection问题?
LocColl = new ObservableCollection<Localite>(Factory.getILocalite().ListLocalite());
你是如何测量内存使用量的? – Paparazzi
我使用了VS2013分析仪和我的老TaskManager :-) – draco951
TaskManager不是测量记忆的好工具。让循环运行10000次,看看你是否得到和实际的OOM异常。 – Paparazzi