2016-12-05 12 views
0

У меня есть следующий код, чтобы получить некоторые конкретные WorkItems:Как получить поля из WorkItem с использованием WIQL в один звонок для ускорения?

string workItemQueryString = "Select Id, State, Type From WorkItems Where [Work Item Type] = 'Code Review Request' And [Area Path] = 'abc' Order By [Changed Date] Desc"; 
var workItemQuery = new Query(workItemStore, workItemQueryString); 
WorkItemCollection queryResults = workItemQuery.RunQuery(); 

Этот код работает быстро (< 1 сек). Однако я также хочу получить дополнительные поля, такие как «Ассоциированный тип контекста» и «Связанный контекст».

Поэтому я использую этот код получить получить эти поля:

var workItemDetails = queryResults.Cast<WorkItem>().Select(workItem => new WorkItemDetail 
{ 
    WorkItem = workItem, 
    AssociatedContextType = workItem.Fields.Contains("Associated Context Type") ? workItem.Fields["Associated Context Type"].Value : null, 
    AssociatedContext = workItem.Fields.Contains("Associated Context") ? workItem.Fields["Associated Context"].Value : null 
}).ToList(); 

Но этот код работает очень медленно (от 13 до 20 секунд), который смотрит на меня, что отдельные запросы (для каждого WorkItem?) Обжигают в TFS для получения всех данных.

Обратите внимание, что когда я использую оператор Parallel.ForEach, код прерывается с исключением.

Общее количество WorkItems в WorkItemCollection составляет около 2800.

+0

Какую версию TFS вы используете? У меня меньше рабочих элементов в TFS 2015.3, и я не мог видеть, что код медленный. Это медленный процесс, когда вы запускаете запрос в VS или Web Access? –

ответ

0

Попробуйте изменить:

AssociatedContextType = workItem.Fields.Contains("AssociatedContextType") ? workItem.Fields["AssociatedContextType"].Value : null, 
AssociatedContext = workItem.Fields.Contains("AssociatedContext") ? workItem.Fields["AssociatedContext"].Value : null 

к:

AssociatedContextType = workItem.Fields.Contains("Associated Context Type") ? workItem.Fields["Associated Context Type"].Value : null, 
AssociatedContext = workItem.Fields.Contains("Associated Context") ? workItem.Fields["Associated Context"].Value : null 
+0

Извините, это была ошибка копирования. Я фактически использовал «Связанный тип контекста» и «Связанный контекст». –

+0

Я мог бы ускорить его с настройками PageSize немного выше: «queryResults.PageSize = 200;» –