<list>替代FOR LOOP

时间:2019-05-06 15:06:58

标签: c# for-loop arraylist

我有一个包含100个精灵的列表,在某些情况下我想隐藏前50个精灵,在另一个情况下我想隐藏后50个精灵。

我正在使用FOR LOOP:

        for (int i = 0; i < 50; i++) {
            spritelist [i].SetActive (false);
        }

我不希望我的代码循环执行50次,我担心这可能会导致性能下降,但是我想有一种更好的方法:

        spritelist[0, 50].SetActive (false);

这是可能的,谢谢。

1 个答案:

答案 0 :(得分:3)

  

我担心这可能会导致性能下降

这称为premature optimization。您正在担心性能,但是您并没有做任何事情来实际测试这种恐惧是否合理。现在,您正在考虑采取措施纠正尚未验证的问题。

我们如何测试?让我们考虑一个非常简单的程序:

using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace ConsoleApp3
{
    class Program
    {
        class Sprite
        {
            private bool _isActive;
            public void SetActive(bool isActive)
            {
                _isActive = isActive;
            }
        }
        static void Main(string[] args)
        {
            List<Sprite> sl = new List<Sprite>();
            for(int i = 0; i<100; i++)
            {
                sl.Add(new Sprite());
            }

            Stopwatch spw = new Stopwatch();
            spw.Restart();
            for (int i = 0; i < 50; i++)
            {
                sl[i].SetActive(false);
            }
            Console.Write(1e6 * spw.ElapsedTicks / TimeSpan.TicksPerSecond);
            Console.WriteLine(" microseconds");
            Console.ReadLine();

        }
    }
}

在我的系统(已有5年历史的i7)上,这通常会产生20到30微秒的结果。如果您将目标性能定为100fps,则每帧为10ms,因此此操作每帧消耗的时间预算约为0.3%。您认为这值得担心吗?我不。只需编写代码,使其可读并有意义。遇到问题时,请担心性能。