Есть ли простой способ найти последнюю итерацию цикла for в Python? Я просто хочу преобразовать список в CSV. сбор во время исполнения
Кроме того, Курт Николс демонстрирует ту же точку в этом примере
public class Program
{
static void Main(string[] args)
{
new TestClass().InstanceMethod();
Console.WriteLine("End program.");
Console.ReadLine();
}
}
public sealed class TestClass
{
private FileStream stream;
public TestClass()
{
Console.WriteLine("Ctor");
stream = new FileStream(Path.GetTempFileName(), FileMode.Open);
}
~TestClass()
{
Console.WriteLine("Finializer");
stream.Dispose();
}
public void InstanceMethod()
{
Console.WriteLine("InstanceMethod");
StaticMethod(stream);
}
private static void StaticMethod(FileStream fs)
{
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine("StaticMethod");
var len = fs.Length;
}
}
Результат такой, как ожидалось -
Ctor
InstanceMethod
Finalizer
StaticMethod
ObjectDisposedException is thrown
В этом примере я не могу понять, как сборщик мусора может собирать временный объект TestClass
, поскольку на его член потока
ссылался StaticMethod
.
Да, Раймонд заявляет, что
GC не отслеживает корни, но об удалении предметов, которые не больше используется
Однако в этом примере объект TestClass
все еще используется, не так ли?
Объясните, пожалуйста, насколько правильно GC собирает объект TestClass
в этом кейс? Также, что более важно, как разработчики должны защититься от таких ситуаций?