Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 优化查找_C#_Optimization_Micro Optimization - Fatal编程技术网

C# 优化查找

C# 优化查找,c#,optimization,micro-optimization,C#,Optimization,Micro Optimization,我有一个用于查找值的数组。我使用前2个值获得n行。 例如,第一列中有2,第二列中有7的所有行。 获取这些值的最快(我指的是微优化)方法是什么? 我现在使用for循环来获取值: int l = SpreadLookupTable.GetLength(0); for (int iCombo = 0; iCombo < l; iCombo++) { bool o = SpreadLookupTable[iCombo, 0] ==

我有一个用于查找值的数组。我使用前2个值获得n行。 例如,第一列中有2,第二列中有7的所有行。 获取这些值的最快(我指的是微优化)方法是什么? 我现在使用for循环来获取值:

 int l = SpreadLookupTable.GetLength(0);

 for (int iCombo = 0; iCombo < l; iCombo++) {                        
      bool o = SpreadLookupTable[iCombo, 0] == perWeek 
      && SpreadLookupTable[iCombo, 1] == workDays;

     if (o) {
         // do stuff
     }
 }

您可以保留一个符合条件的iCombo索引列表,这样在第一次遍历所有数据之后,所有后续时间,您只需遍历索引,并跳过比较。

如果表是静态的,并且已知搜索值的组合,您可以将两个搜索值组合成一个哈希,并使用带有列表的字典将该哈希映射到表中

如果搜索值未知,则可以构建一个或多个多级词典并使用相同的技术


(我与Neil N和你的编辑交叉发布,但这基本上是同一个总体想法的一个版本:将索引预处理为某种查找结构。字典或列表是否更有效取决于数据的特征。)我在一个项目中看到的一个例子是,我的一位同事正在做一个多列网格视图,并将单元格导出到一个数组集。一个新数组用于索引带有“A”的行,另一个新数组用于索引带有“B”的行。然后生成一个以下数组,对数组1和数组2中的索引位置匹配的位置进行索引。使用此功能,您可以对这些行进行微管理,以便在应用程序中使用

 if (o) {
         // do stuff
    }
循环,因此取出所有需要处理的行,因为它们似乎满足中设置的条件

     bool o = SpreadLookupTable[iCombo, 0] == perWeek 
  && SpreadLookupTable[iCombo, 1] == workDays;

在我们的测试中,它将应用程序的工作时间减少了13%左右,但我们有几千行要处理,因此60行可能会比索引的较小尺寸有更好的改进。

这与@TechNeilogy的说法类似?Sry,我与您的编辑交叉发布。我编辑了我的答案以供参考,哈哈,谢谢。我需要从中挤出每一毫秒,这些建议非常有用。回答得好。我认为这与上面所有的答案和我的编辑是相似的。我的情况与此类似,该表被访问数百次或数千次。所以每毫秒都很重要。
     bool o = SpreadLookupTable[iCombo, 0] == perWeek 
  && SpreadLookupTable[iCombo, 1] == workDays;