J'ai un tel code:vendrons vraiment libérer la mémoire s'il y a d'autres objets pointant vers elle?
public class A: IDisposable
{
public CPlusCode cPlusCode{get;set;}
public void CallB()
{
using(bCode = new B(cPlusCode))
{
//do everything in B
}
}
public void Dispose()
{
cPlusCode.Dispose();
}
}
public class B: IDisposable
{
private CPlusCode cpp;
public B(CPlusCode cPlus)
{
cpp= cPlus;
}
public void Dispose()
{
cpp.Dispose();
//dispose everything
}
}
public static void Main()
{
for(int i=0; i<100000; i++)
{
var aObject = new A();
aObject .CallB();
}
}
Le problème est que quand j'exécute Main
et B
mange beaucoup de mémoire à instancier, et de mon observation, il semble que la mémoire consommée par le programme n'est pas libéré.
vendrons vraiment libérer la mémoire s'il y a d'autres objets pointant vers elle?
Vous ne devriez probablement pas disposer de la ressource dans B, sauf si elle fait une copie de la ressource ou en alloue une nouvelle elle-même. La façon dont le code est écrit, appeler CallB() deux fois sur le même objet entraînerait une exception. –