gpt4 book ai didi

wpf - 有人可以用 FileStream 解释 WPF 内存泄漏吗?

转载 作者:行者123 更新时间:2023-12-04 16:08:12 24 4
gpt4 key购买 nike

我在循环中打开一系列大文件,但出现了我不明白的内存泄漏。
以下代码不会造成内存泄漏:

 DataContractSerializer dataContractSerializer = new DataContractSerializer(typeof(List<GeographicalEntity>), GetKnownTypes());
List<GeographicalEntity> temporaryEntities;
using (FileStream fileStream = new FileStream(dataFilePath, FileMode.Open))
{
temporaryEntities = dataContractSerializer.ReadObject(fileStream) as List<GeographicalEntity>;
}
geographicalEntities.AddRange(temporaryEntities);
temporaryEntities.Clear();
temporaryEntities = null;
dataContractSerializer = null;

相比之下,以下代码的内存使用量不断增加:
 DataContractSerializer dataContractSerializer = new DataContractSerializer(typeof(List<GeographicalEntity>), GetKnownTypes());
List<GeographicalEntity> temporaryEntities;
using (FileStream fileStream = new FileStream(dataFilePath, FileMode.Open))
{
temporaryEntities = dataContractSerializer.ReadObject(fileStream) as List<GeographicalEntity>;
}
geographicalEntities.AddRange(temporaryEntities);
//temporaryEntities.Clear();
//temporaryEntities = null;
dataContractSerializer = null;

我不明白为什么需要清除和取消“临时实体”。没有其他对该变量的引用。有人可以解释这种行为吗?

最佳答案

geotities.AddRange() 似乎正在收集 GeographicalEntity 的列表。

为什么内存使用不会增加?

第一个没有的原因是因为您正在添加它们,然后再次清除它们,因此地理实体有一组空列表。

编辑:实际上刚刚意识到 geotities 也是一个 List<> ,所以我的最后一句话不适用。

我猜引用的代码不能代表真实的东西。在引用的代码中读取的整个文件是无意义的,所以我猜在简化中丢失了一些东西。

关于wpf - 有人可以用 FileStream 解释 WPF 内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8125233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com