是否应明确处置 libgit2sharp 存储库?

should libgit2sharp Repository be explicitly disposed?

是否应该明确处置 libgit2sharp Repository 对象?

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

是否最好将 Repository 对象包装在 using 语句中?

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

处置 Repository 是推荐做法。

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

Dispose() 将确保这些资源正确 freed/released.

但是,已经实施了一些安全网,以防调用者忘记这样做。 Repository 类型定义了一个 finalizer 来处理这个问题。

请记住,这个终结器 运行 的时刻是不可预测的(如文档所述 "before it is reclaimed by garbage collection")。

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