2
假設我的C#程序中有任意數量的線程。每個線程都需要通過查找歷史記錄來查找特定路徑的變更集ID。該方法看起來像這樣:單獨的線程是否需要它自己的VersionControlServer實例與另一個線程同時工作?
public List<int> GetIdsFromHistory(string path, VersionControlServer tfsClient)
{
IEnumerable submissions = tfsClient.QueryHistory(
path,
VersionSpec.Latest,
0,
RecursionType.None, // Assume that the path is to a file, not a directory
null,
null,
null,
Int32.MaxValue,
false,
false);
List<int> ids = new List<int>();
foreach(Changeset cs in submissions)
{
ids.Add(cs.ChangesetId);
}
return ids;
}
我的問題是,是否每個線程需要它自己的VersionControlServer
實例或將一個就夠了?我的直覺告訴我,每個線程都需要自己的實例,因爲TFS SDK使用webservices,如果我真的想要獲得並行行爲,我應該打開多個連接。如果我只使用一個連接,我的直覺告訴我,即使我有多個線程,我也會得到序列行爲。
如果我需要與線程一樣多的實例,我想使用Object-Pool模式,但是如果不使用,連接會超時並關閉很長時間嗎?文檔在這方面似乎很少。
作爲一個方面說明,我還[ (https://github.com/mrcaron/Tfs2010QueryHistoryPerfExp/blob/master/QueryHistoryPerformanceTesting/Program.cs)實現了上述功能,但它將結果放在WAY關閉的位置(不知道爲什麼):'Parallel Pre- Alloc:執行時間平均(ms):5418.07828;並行Alloc OnDemand:執行時間平均(毫秒):1312.86686;並行SameClient:平均執行時間(毫秒):370.89382;串行:執行時間平均(毫秒):288.3632' –