使用 SvnClient 实现更快的 svn cat
我正在寻找一种比 .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 服务器的连接,以便多猫操作可以运行得更快?
I'm looking for a faster way to retrieve files from SVN than svn cat in .NET.
Currently I'm running a svn cat process for each revision, but it's extremely slow.
Then I've tried with 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();
But each iteration is even slower than svn cat.
Is there a way in SvnClient to "reuse" a previously opened connection to the SVN server so that a multiple cat operation can be run faster?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 FileVersions 命令来执行此操作。 这将获取一个完整的文件,并使用单个连接中每个版本之间的差异来获取所有其他文件。 这应该会带来不错的性能提升。
这需要服务器支持该功能。 我不太确定它是什么时候引入的,但是运行 SvnBridge 的 Codeplex 不支持它。 如果我没记错的话,在这种情况下,委托只会被调用一次,在这种情况下,您将不得不恢复到第一个解决方案。 正常情况下,在开始和结束之间的每次修订都会调用代表。
请参阅 中的 WalkMe 方法(和其他方法)此测试用例 查看有关其用法的更多详细信息(用户名 guest,无密码)。
You can use the FileVersions command to do this. This fetches one complete file, and all other files using the differences between each revision in a single connection. This should give a nice performance boost.
This requires a server that supports this feature. I'm not quite sure when it was introduced, but Codeplex running SvnBridge for instance doesn't support it. If I remember correctly the delegate is called only once in that case, in that case you'll have to revert to you first solution. Under normal circumstance the delegate is called for each revision between Start and End.
See method WalkMe (and others) in this testcase to see more details about its usage (Username guest, no password).