3

.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 サーバーへの接続を「再利用」して、複数の cat 操作をより高速に実行できるようにする方法はありますか?

4

1 に答える 1

4

これを行うには、FileVersionsコマンドを使用できます。これにより、1つの完全なファイルと、単一の接続で各リビジョン間の違いを使用する他のすべてのファイルがフェッチされます。これにより、パフォーマンスが向上するはずです。

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はサポートしていません。その場合、代理人が1回だけ呼び出されることを正しく覚えていれば、その場合は最初の解決策に戻る必要があります。通常の状況では、開始と終了の間のリビジョンごとにデリゲートが呼び出されます。

このテストケースのメソッドWalkMe(およびその他)を参照して、その使用法(ユーザー名ゲスト、パスワードなし)の詳細を確認してください。

于 2009-05-16T09:31:55.717 に答える