非常慢的C#/ linq循环需要改进建议

时间:2015-02-27 10:44:34

标签: c# linq

我使用以下代码来尝试查看将数据从一个表复制到另一个表是否遗漏了某些记录。

有可能发生这种情况的原因,但我不会在此详述。

幸运的是,这段代码一次只能运行几百条记录,所以我可以让自己将它们加载到内存中并使用LINQ对象。

正如我所料,我的代码非常慢,我想知道是否有人可以提出任何方法来提高速度。

void Main()
{
    var crossed_data = from kv in key_and_value_table
                       from ckv in copy_of_key_and_value_table
                       where kv.key != ckv.key
                       select new { KeyTable = kv, copyKeyTable = ckv };


    List<Key_and_value> difference = new List<Key_and_value>();
    foreach (var v in crossed_data)
    {
        if (crossed_data.Select(s => s.Kv.key).ToList().
        Contains(v.ckv.Key) == false)
        {

            difference.Add(v.ckv);
        }
    }

}

public class Key_and_value
{
    public string Key { get; set; }
    public decimal Value { get; set; }

}
非常感谢提前 乙

1 个答案:

答案 0 :(得分:1)

当您不需要时,您每次迭代都会执行Select。您可以将其移动到外部范围。

var keys = crossed_data.Select(s=>s.ckv.key).ToList();

foreach(var v in crossed_data )
{
    if (keys.Contains(v.kv.Key) == false) 
    {
        difference.Add(v.Kv);
    }
}

这应该可以提高速度。