Альтернатива для FOR LOOP с <LIST> - PullRequest
0 голосов
/ 06 мая 2019

У меня есть список, содержащий 100 спрайтов, в некоторых условиях я хочу скрыть первые 50, а в другом состоянии я хочу скрыть последние 50.

Я использую для цикла:

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

Я не хочу, чтобы мой код зацикливался 50 раз, я боюсь, что это может привести к снижению производительности, но я думаю, что есть лучший способ, подобный этому:

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

ЭТО ВОЗМОЖНО, СПАСИБО ЗА ПРЕДЕЛА.

1 Ответ

3 голосов
/ 06 мая 2019

Боюсь, это может привести к снижению производительности

Это называется преждевременная оптимизация . Вы беспокоитесь о производительности, но вы ничего не сделали, чтобы проверить, оправдан ли этот страх. Теперь вы рассматриваете возможность принятия мер по исправлению проблемы, которая на самом деле не была подтверждена.

Как мы можем проверить? Давайте рассмотрим очень простую программу:

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();

        }
    }
}

В моей системе (пятилетняя i7) результат обычно составляет 20-30 микросекунд. Если рассматривать целевую производительность в 100 кадров в секунду, то это 10 мс на кадр, поэтому эта операция потребляет около 0,3% вашего временного бюджета на кадр. Как вы думаете, стоит ли беспокоиться? Я не. Просто напишите код, чтобы он был читабелен и имел смысл. Беспокойство о производительности, когда это становится проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...