首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用IEnumerable的最有效方法

使用IEnumerable的最有效方法
EN

Stack Overflow用户
提问于 2013-07-17 23:52:29
回答 2查看 122关注 0票数 3

在C#中遍历集合/IEnumeration的最有效方法是什么?我有一个列表,其中包含近1100个对象。这些对象中几乎有10个包含1000个子对象(相同类型)。遍历此列表几乎需要5-6秒。下面是我的代码:

代码语言:javascript
运行
复制
foreach (Parameter par in this.AllParameters) //this.AllParameters is Generic.List type
{
    foreach (Parameter subPar in par.WrappedSubParameters)
    {
        subPar.IsSelected = false;
    }
    par.IsSelected = false;
}

有没有办法优化这段代码,让它足够快,不需要5-6秒?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-17 23:54:14

按照编写的方式,循环可能是最快的选择之一。

由于这些操作都在内存中,并且每个写操作似乎都在一个单独的实例上(无同步),因此您可以将其并行化以获得一些收益:

代码语言:javascript
运行
复制
Parallel.ForEach(this.AllParameters, par =>
{
    foreach (Parameter subPar in par.WrappedSubParameters)
    {
        subPar.IsSelected = false;
    }
    par.IsSelected = false;
});

请注意,我只是(故意)并行化外部循环,因为这应该提供足够的工作项来充分利用所有处理核心。

另一个潜在的问题-如果您的IsSelected属性通过数据绑定绑定到控件,则您的UI可能会不断更新,这可能解释了更新速度非常慢的原因。这也会导致并行化没有实际效果,因为瓶颈不是这些循环,而是UI绑定。

您可能希望解除绑定/重新绑定控件,或者暂停控件上的更新,直到您的循环完成。

票数 4
EN

Stack Overflow用户

发布于 2013-07-23 17:41:47

您编写的循环已经是最有效的迭代方式。唯一的问题可能是绑定到用户界面元素(Grid、List等)。

MVVM中的一个解决方法是解除绑定数据绑定,并在您完成评级后,再次绑定它们。

否则,不要设置实际的属性,只需设置字段,在迭代之后,您可以通知用户界面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17704545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档