是否应该显式地释放libgit2sharp存储库?

是否应该显式地释放libgit2sharp存储库?,git,repository,dispose,using-statement,libgit2sharp,Git,Repository,Dispose,Using Statement,Libgit2sharp,libgit2sharp存储库对象是否应该被显式释放 如果不总是通过Repository.Dispose()执行清理,那么可能产生的负面后果是什么?非GC的存储库对象能否在各种.git文件上保留锁 是否最好使用语句将存储库对象包装在中 var localRepo = new Repository("{local repo path}", new RepositoryOptions()); using (localRepo) { // checkout // etc. } 建议处

libgit2sharp
存储库
对象是否应该被显式释放

如果不总是通过
Repository.Dispose()
执行清理,那么可能产生的负面后果是什么?非GC的
存储库
对象能否在各种.git文件上保留锁

是否最好使用
语句将存储库对象包装在

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

建议处置
存储库

实际上,这种类型包含指向非托管资源的指针(本机内存、指向
.git
目录下的文件句柄的间接指针,…)

Dispose()
将确保正确释放/释放这些资源

然而,已经实施了一些安全网,以防来电者忘记这样做。
存储库
类型定义了一个,它将处理这个问题

请记住,此终结器运行的时刻是不可预测的(如文档“在垃圾回收回收之前”所述)


因此,建议您自己控制存储库的处置。

我在源代码中没有看到终结器,我是否遗漏了什么?我想在PowerShell脚本中使用LibGit2Sharp,这样我就不太担心在GC收集对象时是否会延迟清理,只要它运行eventually@felixfbecker不再需要终结器。看提交。有趣的是,你能解释一下安全手柄的作用吗?你认为不在PowerShell中处理是可以的吗?@FelixBecker我相信这本身就是一个令人惊讶的堆栈溢出问题