Как повысить производительность этого запроса linq ?
у меня есть запрос Linq, который в настоящее время занимает около 15 минут, так как он последовательно вызывает 3 функции, можно ли улучшить производительность этого запроса ?
var results = from myRow in dtTaskandBugs.AsEnumerable() select myRow; results.ToList() .ForEach( r => { r["Storyid"] = GetStoryid(r["Id"]); r["FeatureID"] = Fidname(r["Storyid"]); r["FeatureName"] = r["FeatureID"].ToString() == "0" ? "Anonymous" : fname(r["FeatureID"]); });
Что я уже пробовал:
у меня есть запрос Linq, который в настоящее время занимает около 15 минут, так как он последовательно вызывает 3 функции, можно ли улучшить производительность этого запроса ?
var results = from myRow in dtTaskandBugs.AsParallel() select myRow; results.ForAll(async r => { Task<int> storyProcessing = GetStoryid(r["Id"]); Task<int> fidProcessing = Fidname(r["Storyid"]); Task<string> featureProcessing = r["FeatureID"].ToString() == "0" ? Task.FromResult("Anonymous") : fname(r["FeatureID"]); r["Storyid"] = await storyProcessing; r["FeatureID"] = await fidProcessing; r["FeatureName"] = await featureProcessing; }); public async Task<int> GetStoryid(object _TbId) { Task<int> processing = Task.Run(() => { string _wiql = String.Format("SELECT [System.Id],[System.Title] " + "FROM WorkItemLinks WHERE ([Source].[System.WorkItemType] = 'Product Backlog Item') " + "And ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward') And ([Target].[System.Id] = {0} " + "AND [Target].[System.WorkItemType] = 'Task')" + " ORDER BY [System.Id] mode(Recursive,ReturnMatchingChildren)", _TbId); Microsoft.TeamFoundation.WorkItemTracking.Client.Query _query = new Microsoft.TeamFoundation.WorkItemTracking.Client.Query(_workitemstore, _wiql); WorkItemLinkInfo[] _links = _query.RunLinkQuery(); if (_links.Count() == 2) //only 1 child and its parent { return _links[1].SourceId; } else { return 0; }/*delay-heavy processing*/ }); //Any independent processing int result = await processing; //Processing dependent on the result return result; } public async Task <int> Fidname(object _id) { Task<int> processing = Task.Run(() => { string _wiql = String.Format("SELECT [System.Id],[System.Title],[System.Links.LinkType] FROM WorkItemLinks WHERE ([Source].[System.Id] = {0})" + " And ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Reverse')" + " And ([Target].[System.WorkItemType] = 'Feature') ORDER BY [System.Id]", _id); Microsoft.TeamFoundation.WorkItemTracking.Client.Query _query = new Microsoft.TeamFoundation.WorkItemTracking.Client.Query(_workitemstore, _wiql); WorkItemLinkInfo[] _links = _query.RunLinkQuery(); if (_links.Count() == 2) //only 1 child and its parent { return _links[1].TargetId; } else { return 0; }/*delay-heavy processing*/ }); //Any independent processing int result = await processing; //Processing dependent on the result return result; } public async Task<string> fname(object fid) { Task<string> processing = Task.Run(() => { string Ftitle = ""; string _wiql = string.Format("SELECT[System.Title], [System.Id]" + " FROM WorkItems WHERE[System.Id] = {0}" + " AND[System.WorkItemType] = 'Feature' ORDER BY[Microsoft.VSTS.Common.Priority]", fid); Microsoft.TeamFoundation.WorkItemTracking.Client.Query _query = new Microsoft.TeamFoundation.WorkItemTracking.Client.Query(_workitemstore, _wiql); WorkItemCollection workItemCollection = _query.RunQuery(); foreach (WorkItem workItem in workItemCollection) { Ftitle = workItem.Title; } return Ftitle; /*delay-heavy processing*/ }); //Any independent processing string result = await processing; //Processing dependent on the result return result; }
Цитата:функция fidname выдает ошибку, а _id пуст, пожалуйста, скажите мне, что нужно сделать, чтобы исправить эту ошибку.
Patrice T
Что делают эти 3 функции?
Akhil Jain
wiql есть во всех них, возвращающих int/string
Patrice T
Какую работу они выполняют?
целочисленная факторизация? шифр? хеширование? ...
Akhil Jain
wiql query tfs workitem проверка родителя или нет