3

嵌套“foreach”的数量是否有最佳实践?

那就是我在复杂字典上陷入嵌套的“foreach”,是否有一点开始产生“可能”阻碍性能的开销?这是否值得考虑。

为了使其具体而不是主观的:我有 3 个看起来像这样的复杂字典;

Dictionary<int, Dictionary<string, XObject>()
Dictionary<string, List<YObject>()
Dictionary<string, Dictionary<string, List<ZObjects>()

显然,现在,当我过滤这些字典(在 foreach 中)以生成我正在寻找的数据时,我的代码结构正朝着 5 个嵌套的“foreach”方向发展,不包括外部 1。在回答这些是我的区域我担心可能会受到影响:

  1. 性能(上下文切换过多)
  2. 内存(在给定时刻将所有数据集保留在内存中)
  3. 可维护性(糟糕的程序员!)

最佳实践还是无关紧要?

4

2 回答 2

4
  1. foreach 语句没有“上下文切换”。
  2. 内存:完全不相关,内存由数据而不是枚举器占用(由 foreach 语句使用)
  3. 可维护性:考虑重构代码添加方法来执行项目
于 2013-04-16T12:18:12.147 回答
3

实现这一点的一种清晰简洁的方法是在功能上将它们分开。考虑:

// represents outer loop
IEnumerable<KeyValuePair<string, string>> Operation1(IEnumerable<KeyValuePair<string, string>> input)
{
   // outer loop processing
   IEnumerable<KeyValuePair<string, string>> output = Operation2(input);
   return output;
}

// which feeds in to...

IEnumerable<KeyValuePair<string, string>> Operation2(IEnumerable<KeyValuePair<string, string>> input)
{
    // work on it
   IEnumerable<KeyValuePair<string, string>> output = Operation3(input);
   return output;
}

// and finally

IEnumerable<KeyValuePair<string, string>> Operation3(IEnumerable<KeyValuePair<string, string>> input)
{
    // work on it
    return input;
}

这使循环的功能保持独立,可以更改顺序,并且每个循环都是一个谨慎的工作单元。

于 2013-04-16T12:19:00.613 回答