libgit2sharp存储库“安全句柄已关闭”

时间:2015-07-18 01:31:41

标签: git repository dispose using-statement libgit2sharp

在同一方法中两次实例化Repository对象是否有任何问题,每次都包含在一个单独的using()语句中:

using(var repo = new Repository({local-path}, new RepositoryOptions()) {
// do some stuff with repo
}

// do some other stuff not related to repo

using(var repo = new Repository({local-path}, new RepositoryOptions()) {
// do even more stuff with repo
}

对于具有此结构的此类代码块,在do even more stuff块中,我遇到了运行时异常safe handle has been closed

1 个答案:

答案 0 :(得分:1)

  

在同一方法中两次实例化Repository对象是否有任何问题,每次都包含在一个单独的using()语句中

实例化Repository实例非常便宜,因此这种方法没有问题。

但是,必须记住以下事项

  • LibGit2Sharp库返回的对象(Reference s,Commit s,Tree s,..)预计将在{{的生命周期内使用1}}(即在它被处置之前)。不这样做可能导致Repository被抛出。

  • 出于性能原因 libgit2 ,底层本机库会进行大量缓存。每次处理ObjectDisposedException时都会清除此缓存。因此,通过依赖Repository类型的不同实例,您可能会阻止其受益于此性能障碍。

  

我遇到了运行时异常安全句柄已关闭。

如果您在第二个Repository块中重复使用源自第一个的对象,则可能会发生这种情况。