c# - 回归本源; for 循环、数组/向量/列表和优化

标签 c# arrays optimization list performance

我最近在编写一些代码时遇到了一种方法,该方法具有 3 个 for 循环,适用于 2 个不同的数组。

基本上,发生的事情是一个 foreach 循环遍历一个向量并从一个对象转换 DateTime,然后另一个 foreach 循环从一个对象转换一个 long 值。这些循环中的每一个都会将转换后的值存储到列表中。

最后一个循环将遍历这两个列表并将这些值存储到另一个列表中,因为需要为日期完成一个最终转换。

然后在完成所有这些之后,使用 ToArray() 将最后两个列表转换为数组。

好的,请耐心等待,我终于开始回答我的问题了。

所以,我决定制作一个 for 循环来替换前两个 foreach 循环,并一次性转换值(第三个循环是准必要的,不过,我确信通过一些工作我也可以把它进入单循环)。

但后来我阅读了 Gustav Duarte 的文章“您的计算机在等待时做了什么”并开始思考内存管理以及在同时访问两个列表的 for 循环中访问数据时数据在做什么。

所以我的问题是,对于这样的事情,最好的方法是什么?尝试压缩 for 循环,使其在尽可能少的循环中发生,从而导致对不同列表的多次数据访问。或者,允许多个循环并让系统引入它预期的数据。这些列表和数组可能很大,循环遍历 3 个列表,也许 4 个取决于 ToArray() 的实现方式,可能会变得非常昂贵 (O(n^3) ??)。但是根据我在上述文章和我的 CS 类(class)中的理解,必须获取数据也可能很昂贵。

有人愿意提供任何见解吗?还是我已经完全失去理智,需要重新学习我没有学过的东西?

谢谢

最佳答案

最好的方法?编写最易读的代码,计算出它的复杂性,并确定这是否真的是一个问题。

如果您的每个循环都是 O(n),那么您仍然只有一个 O(n) 操作。

话虽如此,但听起来 LINQ 方法确实更具可读性……而且很可能也更高效。诚然,我们还没有看到代码,但我怀疑它是 LINQ 的理想

关于c# - 回归本源; for 循环、数组/向量/列表和优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/335807/

相关文章:

python - 构建词形还原器 : speed optimization

php - GROUP BY 和 ORDER BY 太慢了。如何使速度更快?

c# - 使用 Gridview 进行参数化向下钻取

c++ - 在虚继承中调用非虚基方法是否有额外的开销?

c# - Docker - 构建时未找到框架 microsoft.AspNetCore.App,版本 '3.1' 0

ruby - 如何比较数组中的值

c++ - 关于 "Address-of operator"(&)和c、c++中数组的问题

c++ - 如何在 CodeLite 中为动态分配的数组添加调试监视?

c# - 当编辑框有多个时如何获取hWnd?

c# - FreeAgent API (OAuth) 来自 c#