2015-07-16 1 views
1

Un objet libgit2sharp Repository doit-il être explicitement éliminé?Le dépôt libgit2sharp doit-il être explicitement éliminé?

Si le nettoyage n'est pas toujours effectué via Repository.Dispose(), quelles sont les conséquences négatives possibles? Un objet non-GC'd Repository peut-il conserver des verrous sur divers fichiers .git?

Est-il préférable d'entourer l'objet Repository dans l'instruction using?

var localRepo = new Repository("{local repo path}", new RepositoryOptions()); 
using (localRepo) { 
    // checkout 
    // etc. 
} 

Répondre

1

La mise en place d'un Repository est recommandée.

En effet, ce type contient des pointeurs vers des ressources non gérées (mémoire native, pointeurs indirects vers les descripteurs de fichiers sous le répertoire .git, ...).

Dispose() s'assurera que ces ressources sont correctement libérées/libérées.

Cependant, un filet de sécurité a été mis en place si l'appelant oublie de le faire. le type Repository définit un finalizer qui prendra soin de cela. Gardez à l'esprit que le moment où ce finaliseur sera exécuté n'est pas prévisible (comme indiqué par la documentation "avant qu'il ne soit récupéré par le garbage collection"). Ainsi, la recommandation de contrôler par vous-même la mise au rebut de votre dépôt.