2011-07-26 15 views
0

我正在處理的項目需要我獲取包含約300個條目的文件夾的歷史記錄。來自QueryHistory的IEnumerable大約需要10秒才能移動到第一個ChangeSet

正如標題所說,當我第一次調用MoveNext()方法時,大約需要7秒才能完成。這是正常的行爲,還是應該考慮實現一個自定義IEnumerator接口來加快速度?

這裏的代碼顯示我所談論的一個片段:

System.Collections.IEnumerable histEnumerable = vcs.QueryHistory(
    item.SourceServerPath, 
    VersionSpec.Latest, 
    0, 
    RecursionType.Full, 
    "", 
    null, 
    null, 
    Int32.MaxValue, 
    true, 
    false); 
System.Collections.IEnumerator histEnumerator = histEnumerable.GetEnumerator(); 
histEnumerator.MoveNext(); //This method will take about 7 seconds to complete. 

任何幫助,將不勝感激,謝謝。

回答

2

聽起來好像QueryHistory的實現正在做一些前期工作,使得第一個項目昂貴。你最好的選擇可能是把它放在後臺線程中。我會看看Reactive Extensions。您應該能夠非常輕鬆地將其轉換爲推送模型,並在數據進入時進行處理而不會阻塞。

你會做這樣的事情:

histEnumerable.ToObservable(Scheduler.TaskPool).Subscribe(a => DoSomething(a));

+0

我沒有使用這個確切的方法,但你讓我聯想到在後臺做這件事。 我最終的解決方案涉及到兩次調用查詢歷史記錄,並限制第一次調用的結果數量。我只是在後臺運行第二個枚舉,並且在第一個退出的地方繼續。 謝謝 – Slater

相關問題