Я попытался с помощью следующего кода
[DllImport("Core.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr CreateNode();
[DllImport("Core.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern void ReleaseNode(IntPtr handle);
class Node
{
IntPtr nativePtr;
public int id;
public Node(int i)
{
nativePtr = CreateNode();
id = i;
Debug.WriteLine("Constructed " + id);
}
~Node()
{
ReleaseNode(nativePtr);
Debug.WriteLine("Destructed " + id);
}
}
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
Node n = new Node(i);
} //this scope
}
}
Каждый объект для класса Node
, созданный внутри цикла for
, не разрушается после выхода из области действия цикла for (прокомментируется как "this scope").он вызывается только тогда, когда заканчивается область действия метода Main.Можно ли автоматически вызывать узел ~, когда заканчивается область цикла for?
при выполнении кода выше, в окне отладки я получаю следующее:
Constructed 0
Constructed 1
Constructed 2
Constructed 3
Constructed 4
Constructed 5
Constructed 6
Constructed 7
Constructed 8
Constructed 9
Destructed 9
Destructed 0
Destructed 8
Destructed 7
Destructed 6
Destructed 5
Destructed 4
Destructed 3
Destructed 2
Destructed 1
это показывает, чтопервый объект разрушается в конце концов.Если это произойдет, что произойдет, когда я запускаю тысячи элементов в цикле?Будет ли это занимать всю мою память?
Как я могу полностью освободить свои неуправляемые ресурсы?