2014-02-14 3 views
1

Код:Как сократить время выполнения?

testItemList = testResults.Select(item => project.Store.GetWorkItem(item.TargetId)).ToList(); 

testItemList является (локальная переменная) Список testItemList

TestResults является (локальная переменная) WorkItemLinkInfo [] TestResults

Всего 610 рабочих элементов присутствуют. Как сократить время выполнения? На данный момент для выполнения этой строки кода требуется 20 секунд. Как правильно настроить вышеуказанный код, чтобы сократить время выполнения?

+0

610 очень маленький. Они загружаются из базы данных? Возможно, у вас есть проблема с N + 1, и эти 610 итераций - 610 запросов. –

+0

@SimonWhitehead, No, Элементы загружаются из TFS. –

+0

Он будет быстро запускать много быстрее без 'ToList()'. Но это просто перемещает расходы. –

ответ

3
Query query = new Query(project.Store, "Select [Title] From WorkItems", testResults.Select(item => item.TargetId).ToArray()); 
var car = query.BeginQuery(); 
//Do something else while awaiting server response... 
testItemList = query.EndQuery(car); 

Ваш код выполняет 610 общих поездок на сервер и загружает каждое поле каждого рабочего элемента. Этот код выполняет однократную поездку и загружает только поле «Название».

Обратите внимание, что вы по-прежнему сможете получить доступ к каждому полю каждого рабочего элемента в списке testitemlist, но каждый доступ к полю, не включенному в исходную строку запроса, повлечет за собой другую поездку туда и обратно.

http://msdn.microsoft.com/en-us/library/bb130306.aspx

+0

Как преобразовать workitemcollection в словарь? У меня этот код 'var testItemMapQuery = testItemList.ToDictionary (w => w, createItemFromQuery);' –

+0

'testItemList.Cast .ToDictionary (w => w.id, w => w);'? –

+0

В 'Cast ' сообщение об ошибке отображается как 'System.Linq.Queryable.Cast (System.Linq.IQueryable) - это метод, который недопустим в данном контексте. –

1

У меня есть предположение: Store - это магазин WorkItem?
Что такое testResults?

Ваш оператор linq приведет к циклу for. Создание нового запроса для каждого ID. Вы могли бы ускорить результат, используя пакетный запрос.
Возможно, WorkItemStore.Query (id [], wiql) может ускориться. Предоставление списка идентификаторов.
Тогда вы получите WorkItemCollection. «Wiql» - это язык запросов для указания полей, которые вы хотите.
Извините за короткий ответ. У меня нет TFS под рукой, чтобы попробовать попробовать и опубликовать проверенный фрагмент кода.

Смежные вопросы