Список, содержащий еще 2 списка, работает медленно в цикле, могу ли я использовать поток, чтобы сделать это быстрее?
Это мой код, в котором список содержит еще 2 списка, где
WorkItem
коллекция содержит большое количество записей, таких как 7000, что занимает 10 минут. Есть ли какой-нибудь способ сделать это быстрее и в случае, если он решает тип workItem, если это ошибка, задача или элемент невыполненной работы продукта? Пожалуйста, скажите мне, как сделать цикл быстрее. Это займет 10 минут, чтобы зациклить 7000 записей можем ли мы использовать резьбу, чтобы сделать это быстрее?var workItemList = new List<WorkItemViewModel>(); for (int i = 0; i < workItemCollection.Count; i++) { var workItem = workItemCollection[i]; if (workItem.Type.Name == "Product Backlog Item") { var model = new WorkItemViewModel() { FID = (workItem.WorkItemLinks.Count > 0) ? ((workItem.WorkItemLinks[0].LinkTypeEnd.Name.ToString() != "Child") ? workItem.WorkItemLinks[0].TargetId : 0) : 0, ID = workItem.Id, Name = workItem.Title, State = workItem.State, priorty = Convert.ToInt32(workItem.Fields["Priority"].Value), // Size =(int) workItem.Fields["Size"].Value , Size = Convert.ToInt32(workItem.Fields["Effort"].Value), StoryPoints = Convert.ToInt32(workItem.Fields["Story Points"].Value), DoneStatus = workItem.Fields["Done Status"].Value.ToString(), StoryOwner = workItem.Fields["Story Owner"].Value.ToString(), Assignedto = workItem.Fields["Assigned To"].Value.ToString(), StoryAuthor = workItem.Fields["Story Author"].Value.ToString(), IterationPath = workItem.IterationPath }; workItemList.Add(model); } else { switch (workItem.Type.Name) { case "Task": var task = new TFSTask() { Storyid = (workItem.WorkItemLinks.Count > 0) ? workItem.WorkItemLinks[0].TargetId : 0, ID = workItem.Id, name = workItem.Title, //activity = workItem.Fields["MyCompany.Activity"].Value.ToString(), //start = (DateTime?)workItem.Fields["MyCompany.ActivityStart"].Value, //due = (DateTime?)workItem.Fields["MyCompany.ActivityFinish"].Value, status = workItem.State, IterationPath = workItem.IterationPath, Assignedto = workItem.Fields["Assigned To"].Value.ToString(), priorty = Convert.ToInt32(workItem.Fields["Priority"].Value), effort = Convert.ToInt32(workItem.Fields["effort"].Value), Completed = Convert.ToInt32(workItem.Fields["Completed"].Value) }; if (task.Storyid != 0) { workItemList.Last().Tasks.Add(task); } break; case "Bug": var bug = new TFSIssue() { Storyid = (workItem.WorkItemLinks.Count > 0) ? workItem.WorkItemLinks[0].TargetId : 0, ID = workItem.Id, Name = workItem.Title, //start = (DateTime?)workItem.Fields["MyCompany.ActivityStart"].Value, //due = (DateTime?)workItem.Fields["MyCompany.ActivityFinish"].Value, State = workItem.State, IterationPath = workItem.IterationPath, Assignedto = workItem.Fields["Assigned To"].Value.ToString(), priorty = Convert.ToInt32(workItem.Fields["Priority"].Value), effort = Convert.ToInt32(workItem.Fields["effort"].Value), // Completed = Convert.ToInt32(workItem.Fields["Completed"].Value) }; if (bug.Storyid != 0) { workItemList.Last().Issues.Add(bug); } break; default: break; } } } public class WorkItemViewModel { public string Name { get; set; } public int ID { get; set; } public string State { get; set; } // public DateTime? due { get; set; } public int priorty { get; set; } public int Size { get; set; } // public int effort { get; set; } public int StoryPoints { get; set; } public string DoneStatus { get; set; } public string StoryOwner { get; set; } public string Assignedto { get; set; } public string StoryAuthor { get; set; } public string IterationPath { get; set; } public int FID { get; set; } public List<TFSIssue> Issues { get; set; } public List<TFSTask> Tasks { get; set; } public WorkItemViewModel() // Added a public constructor { Issues = new List<TFSIssue>(); Tasks = new List<TFSTask>(); } }
Что я уже пробовал:
Список, содержащий еще 2 списка, работает медленно в цикле, могу ли я использовать поток, чтобы сделать это быстрее?
BillWoodruff
Ваша первая цель может состоять в том, чтобы попытаться уменьшить количество записей, которые вы обрабатываете, фильтруя то, что вы извлекаете из своей базы данных.
Akhil Jain
это невозможно !!
Richard MacCutchan
Нарезание резьбы не поможет, пока вы не устраните проблемы, указанные ниже. И даже тогда нет никакой гарантии, что он будет работать быстрее.