Я спросил question об этом методе:Когда нужно распоряжаться и почему?
// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
TextWriter textWriter = new StreamWriter(filename);
xmlSerializer.Serialize(textWriter, toSerialize);
textWriter.Close();
}
в ответ я получил это как дополнительное замечание:
Убедитесь, что вы всегда распоряжаться располагаемые ресурсы, такие как потоки и текстовых читателей и писателей. Это не похоже на ваш метод SerializeObject.
Итак, я могу сказать, что это будет казаться слишком хромым для кого-то, кто кодировал C# в течение года или двух, но почему я должен распоряжаться им?
Видно, что testWriter
имеет способ утилизации, но не должен ли сбор мусора заботиться об этом? Я приехал из Delphi в C#. В Delphi мне пришлось все очистить, так что это не случай, когда я хочу быть ленивым. Мне просто сказали, что если вы вынудите освободить память, которую ваши объекты возьмут, это может привести к плохим вещам. Мне сказали: «Просто позвольте сборщику мусора сделать это».
- Итак, почему мне нужно позвонить в распоряжение? (Мое предположение, что это потому, что
textWriter
попадает на диск.) - Есть ли список объектов, с которыми мне нужно быть осторожными? (Или простой способ узнать, когда мне нужно позвонить в распоряжение?)
http://www.stackoverflow.com/questions/1691846/does-garbage-collector-call-dispose –
Насколько я понимаю, это приводит к тому, что GC знайте, что это готово к сбору, вместо того, чтобы проверить, готов ли он.Кроме того, вы можете сказать GC собирать «ранний» на этом элементе, вместо того, чтобы рамка висела на нем какое-то время «на всякий случай» http://www.devx.com/dotnet/Article/33167 – jcolebrand
@drachenstern - популярное заблуждение, но неверное. Dispose просто предоставляет вам механизм принудительного закрытия неуправляемых ресурсов, таких как дескрипторы файлов или сетевые сокеты, как только вы закончите с ними, не дожидаясь сбора мусора. Он не сигнализирует GC о сборе объекта. – Paolo