unity C#的一些注意事项

1,2025-02-08

集合在声明的时候不能连在一起声明,例如

poslist = rotlist = new List<float>();

因为集合本质是链表,这样写会导致Add数据的时候poslist和rotlist链在一起,导致数据融合

应该写成

poslist = new List<float>();
rotlist = new List<float>();

 

2,2025-02-25

/***********************************************************************************************************************************/

在性能上,两个单独的 for 循环 和 一个合并的 for 循环 的效率取决于具体的使用场景和数据规模。以下是详细的分析:


1. 两个单独的 for 循环

csharp
复制
for (int i = 0; i < AniopenlistL.Count; i++)
{
    // 处理 AniopenlistL[i]
}
for (int i = 0; i < AniopenlistR.Count; i++)
{
    // 处理 AniopenlistR[i]
}

优点

  • 代码清晰

    • 每个循环只处理一个列表,逻辑简单明了。

  • 缓存友好

    • 连续访问一个列表的元素,可能更好地利用 CPU 缓存。

缺点

  • 额外的循环开销

    • 需要初始化两个循环变量,执行两次循环条件判断。


2. 一个合并的 for 循环

csharp
复制
for (int i = 0; i < Mathf.Max(AniopenlistR.Count, AniopenlistL.Count); i++)
{
    if (i < AniopenlistR.Count)
    {
        // 处理 AniopenlistR[i]
    }
    if (i < AniopenlistL.Count)
    {
        // 处理 AniopenlistL[i]
    }
}

优点

  • 减少循环次数

    • 只需要一个循环变量和一次循环条件判断。

  • 适合并行处理

    • 如果两个列表的处理逻辑可以并行执行,合并循环可能更高效。

缺点

  • 额外的条件判断

    • 每次循环需要检查 i < AniopenlistR.Count 和 i < AniopenlistL.Count

  • 缓存不友好

    • 交替访问两个列表的元素,可能导致 CPU 缓存效率降低。


性能对比

方法循环次数条件判断次数缓存友好性适用场景
两个单独的 for 循环 2 次 2 次 列表大小差异较大,逻辑独立
一个合并的 for 循环 1 次 2 * n 次 列表大小相近,逻辑可以并行
  • 循环次数

    • 两个单独的 for 循环需要执行两次循环。

    • 一个合并的 for 循环只需要执行一次循环。

  • 条件判断次数

    • 两个单独的 for 循环需要执行两次条件判断(每次循环一次)。

    • 一个合并的 for 循环需要执行 2 * n 次条件判断(每次循环两次)。

  • 缓存友好性

    • 两个单独的 for 循环连续访问一个列表的元素,缓存命中率更高。

    • 一个合并的 for 循环交替访问两个列表的元素,缓存命中率较低。


适用场景

  1. 两个单独的 for 循环

    • 适合两个列表大小差异较大,或者处理逻辑完全独立的情况。

    • 例如:

      csharp
      复制
      for (int i = 0; i < AniopenlistL.Count; i++)
      {
          // 处理 AniopenlistL[i]
      }
      for (int i = 0; i < AniopenlistR.Count; i++)
      {
          // 处理 AniopenlistR[i]
      }
  2. 一个合并的 for 循环

    • 适合两个列表大小相近,且处理逻辑可以并行执行的情况。

    • 例如:

      csharp
      复制
      for (int i = 0; i < Mathf.Max(AniopenlistR.Count, AniopenlistL.Count); i++)
      {
          if (i < AniopenlistR.Count)
          {
              // 处理 AniopenlistR[i]
          }
          if (i < AniopenlistL.Count)
          {
              // 处理 AniopenlistL[i]
          }
      }

总结

  • 性能差异

    • 在大多数情况下,两个单独的 for 循环和合并的 for 循环的性能差异可以忽略不计。

    • 如果列表非常大,且处理逻辑简单,两个单独的 for 循环可能稍快(缓存友好性更高)。

  • 代码可读性

    • 两个单独的 for 循环通常更清晰,易于维护。

  • 选择建议

    • 如果两个列表的处理逻辑独立,优先使用两个单独的 for 循环。

    • 如果两个列表的处理逻辑可以并行,且列表大小相近,可以考虑合并的 for 循环。

根据你的具体需求选择合适的方法即可!如果有其他问题,请随时告诉我!

/***********************************************************************************************************************************/

posted @ 2025-02-08 10:58  terrificia  阅读(33)  评论(0)    收藏  举报