2009-05-06 46 views
3

我正在尋找一種更快的方式從SVN中檢索文件,而不是使用.NET中的svn cat。使用SvnClient實現更快的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貓還要慢。

在SvnClient中有一種方法可以「重用」以前打開的連接到SVN服務器,以便多貓操作可以更快運行?

回答

4

您可以使用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不支持它。如果我沒有記錯的話,在這種情況下委託只會被調用一次,在這種情況下,您將不得不恢復爲您的第一個解決方案。在正常情況下,在開始和結束之間調用每個修訂的委託。

請參閱中的方法WalkMe(和其他人)以查看有關其用法的詳細信息(用戶名guest,無密碼)。

+0

我知道這很舊,但是......我認爲「e2」是一個錯字,而且是「e」?而測試用例的鏈接不起作用。在WriteTo()方法上的示例參數將會很好,而不僅僅是「...」。 – RenniePet 2014-11-14 00:02:31