如何才能将C#性能提升到实时

我需要通过C#计算大量的数据我在DB上有10000名患者,每个患者在DB上的记录平均有30次访问我需要检查他的组合他的访问我是通过LINQ完成的C#中的SQL组合并将其与其他患者进行比较,如果我发现其他4名患者具有相同的组合,我会认为它是安全的

我用它来循环代码,但需要时间,我需要提高性能

Parallel.For(0, 10000, (j,loopState) => { int id1 = getid(names[j].ToString(), 101); Parallel.For(0, 10000, (t,loopState1) => { generate_firstACV5A(id1, nvisit(id1), names[j].ToString()); int id2 = getid(names[t].ToString(), 10000); if (id1 == id2) { } else { generate_firstACV5B(id2, nvisit(id2), names[t].ToString()); } if (Enumerable.SequenceEqual(ACV5BFirst, ACV5Afirst) == true) { if (count == 0) { safecount++; if (safecount == 4) { ListViewItem it = new ListViewItem(getid(names[j].ToString(), 1000).ToString()); it.SubItems.Add(names[j].ToString()); listView3.Items.Add(it); loopState1.Break(); } } } }); 

当我将列表比较为真时,我遇到了一些运行错误

我感谢您的帮助

如果你的代码生成了至少几百个ListViewItems ,其中一个问题就是你在代码执行期间添加了ListViewItems ,这会触发ListView重绘(与你拥有的所有其他计算相比速度​​很慢)。 首先将ListViewItems放入List ,完成后将它们添加为数组,如下所示:

 List list = new List(); Object myLock = new Object(); Parallel.For(0, 10000, (j,loopState) => { int id1 = getid(names[j].ToString(), 101); Parallel.For(0, 10000, (t,loopState1) => { generate_firstACV5A(id1, nvisit(id1), names[j].ToString()); int id2 = getid(names[t].ToString(), 10000); if (id1 == id2) { } else { generate_firstACV5B(id2, nvisit(id2), names[t].ToString()); } if (Enumerable.SequenceEqual(ACV5BFirst, ACV5Afirst) == true) { if (count == 0) { safecount++; if (safecount == 4) { ListViewItem it = new ListViewItem(getid(names[j].ToString(), 1000).ToString()); it.SubItems.Add(names[j].ToString()); lock (myLock ) { list.Add(it); } loopState1.Break(); } } } }); listView3.Items.AddRange(list.ToArray()); 

即使在Add期间锁定对列表的访问也会快得多,然后使用大约1000个项目重新绘制listView。 当我测试时,这种方法快了近10倍。