gpt4 book ai didi

.net - 使用 SvnClient 实现更快的 svn cat

转载 作者:行者123 更新时间:2023-12-02 15:09:29 27 4
gpt4 key购买 nike

我正在寻找一种比 .NET 中的 svn cat 更快的从 SVN 检索文件的方法。

目前我正在为每个修订版运行一个 svn cat 进程,但速度非常慢。

然后我尝试使用 SvnClient:

    Stream st = Console.OpenStandardOutput();

SvnWriteArgs wargs = new SvnWriteArgs();

for (int i = 3140; i < 3155; ++i)
{
wargs.Revision = i;

client.Write(new SvnUriTarget("http://filezilla.svn.sourceforge.net/svnroot/filezilla/FileZilla3/trunk/README"), st, wargs);
}
st.Flush();

但每次迭代甚至比 svn cat 还要慢。

SvnClient 中是否有一种方法可以“重用”先前打开的与 SVN 服务器的连接,以便可以更快地运行多猫操作?

最佳答案

您可以使用 FileVersions 命令来执行此操作。这将获取一个完整的文件,并使用单个连接中每个版本之间的差异来获取所有其他文件。这应该会带来不错的性能提升。

public void WriteRevisions(SvnTarget target, SvnRevision from, SvnRevision to)
{
using(SvnClient client = new SvnClient())
{
SvnFileVersionsArgs ea = new SvnFileVersionsArgs
{
Start = from,
End = to
};

client.FileVersions(target, ea,
delegate(object sender2, SvnFileVersionEventArgs e)
{
Debug.WriteLine(e.Revision);
e2.WriteTo(...);
});
}
}

这需要支持此功能的服务器。我不太确定它是什么时候引入的,但是运行 SvnBridge 的 Codeplex 不支持它。如果我没记错的话,在这种情况下,委托(delegate)只会被调用一次,在这种情况下,您将不得不恢复到第一个解决方案。正常情况下,在 Start 和 End 之间的每次修订都会调用委托(delegate)。

参见 this testcase 中的 WalkMe 方法(和其他方法)查看有关其使用的更多详细信息(用户名 guest,无密码)。

关于.net - 使用 SvnClient 实现更快的 svn cat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/829220/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com