I open a series of large files in a loop and I get a memory leak that I don't understand. The following code does not create a memory leak:
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;
In contrast, the memory usage of the following code continues to increase:
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);
I do not understand why the “temporary events” need to be cleared and canceled. There are no other references to this variable. Can anyone explain this behavior?
source share