在同一方法中两次实例化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
。
答案 0 :(得分:1)
在同一方法中两次实例化Repository对象是否有任何问题,每次都包含在一个单独的using()语句中
实例化Repository
实例非常便宜,因此这种方法没有问题。
但是,必须记住以下事项
LibGit2Sharp库返回的对象(Reference
s,Commit
s,Tree
s,..)预计将在{{的生命周期内使用1}}(即在它被处置之前)。不这样做可能导致Repository
被抛出。
出于性能原因 libgit2 ,底层本机库会进行大量缓存。每次处理ObjectDisposedException
时都会清除此缓存。因此,通过依赖Repository
类型的不同实例,您可能会阻止其受益于此性能障碍。
我遇到了运行时异常安全句柄已关闭。
如果您在第二个Repository
块中重复使用源自第一个的对象,则可能会发生这种情况。