我在循环中打开一系列大文件,但出现了我不明白的内存泄漏。以下代码不会造成内存泄漏: 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 的列表。为什么内存使用量不会上升?第一个没有的原因是因为您正在添加它们然后再次清除它们,因此 geographyEntities 有一组空列表。编辑:实际上刚刚意识到地理实体也是一个 List ,所以我的最后一句话不适用。我猜引用的代码不能代表真实的东西。在引用的代码中读取的整个文件是无意义的,所以我猜在简化中丢失了一些东西。关于wpf - 有人可以用 FileStream 解释 WPF 内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8125233/ 10-09 01:08