如何将此for循环C#代码转换为Linq或使处理时间更快?
如何将此for循环C#代码转换为Linq或使处理时间更快?,c#,linq,C#,Linq,List数组_Group=new List(); 数组_Group.Add(新列表()); 对象previosSelecter=null; 对于(int i=0;i
List数组_Group=new List();
数组_Group.Add(新列表());
对象previosSelecter=null;
对于(int i=0;i
由于需要处理大量数据,执行时间非常长。
如何使其执行更简单、更快?试试以下方法:
using System.Linq;
using System.Collections.Generic;
var array_Group = after_Rounded.GroupBy(x => (x as Array_Group)?.FD_T_Act_);
这将生成一个System.Collections.Generic.IEnumerable
,其中T是这两行四舍五入后中的任何内容
Type Group = typeof(Array_Group);
PropertyInfo prop = Group.GetProperty("FD_T_Act_");
你可以在循环之前移动。这是一个常量表达式,将导致始终相同的值,但这也是一个非常昂贵的耗时表达式
通过“GetProperty”访问属性也非常耗时
您可以创建一个委托来改进这一点(也是在循环之前)
是吗
propType currentSelector = getter(current);
linq不会加快速度,但它可能会简化代码。提高性能的方法之一是尽量避免在四舍五入.ElementAt(i)
之后使用。据我所知,它有O(n)
。使用列表
和按索引访问,那么它将是O(1)
@BigB您考虑过并行处理吗?如果您可以将源数据分成更小的数据块并同时处理它们,这可能会很有用。您使用属性值FD\u T\u Act
,这就是示例,还是您希望用作currentSelector的唯一属性?请共享一个。谢谢,如果(previosSelecter==null)@BigB您能给出源数据和预期数据的示例吗
Func<Array_Group, propType> getter = (Func<Array_Group, propType>)
Delegate.CreateDelegate(typeof(Func<Array_Group, propType>), null,
prop.GetGetMethod());
object currentSelector = prop.GetValue(current);
propType currentSelector = getter(current);