可观察集合内存泄漏
本文关键字:泄漏 内存 集合 观察 | 更新日期: 2023-09-27 18:37:06
我在应用程序中使用 MVVM light。我不知道如何释放可观察集合的内存这是我的视图模型:
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"时,它将为我的视图创建一个新的视图模型。 我还有一个按钮来清除可观察集合。
如果我分配一个新的视图模型,或者如果我清除了 ObsevableCollection,内存永远不会释放。对于此示例,每次单击"bt_test"都需要多花费 15Mo 。 在我的应用程序上,每次需要 50 兆,我在测试中达到了 1.4Go 的消耗......(我停止了测试)
你可以帮我吗?
编辑:
经过调查,似乎是我的DAO有罪,有没有可能是我复制ObervableCollection的问题?
LocColl = new ObservableCollection<Localite>(Factory.getILocalite().ListLocalite());
在本文中,我读到WPC检查以查找实现INotifyPropertyChanged的内容。因此,要修复此内存泄漏,您只需要在您的 ViewModel 中实现 INotifyPropertyChanged 如果您不需要 PropertyChanged 事件。
试一试。希望这有帮助。