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