Использование зубчатого списка только для двух индексов

У меня есть приложение, которое использует около 5 различных "списков списков", но я использую только индекс 0 или индекс 1.

Это плохая практика или она приведет к снижению производительности?

Вот пример, который я сделал похожим на то, что я делаю:

internal class Program
{
    private const int Count = 64;
    private static int _index;
    private static List<List<int>> _data = new List<List<int>>();
    private static List<List<int>> _dataprevious = new List<List<int>>();
    private static List<List<double>> _datacalculated = new List<List<double>>();
    private static Random _rand = new Random();

    private static void GetData(object o)
    {
        //Clear list and add new data
        _data[_index].Clear();
        _datacalculated[_index].Clear();
        for (var i = 0; i < Count; i++)
        {
            _data[_index].Add(_rand.Next(4500, 5500));
        }
        for (var i = 0; i < Count; i++)
        {
            _datacalculated[_index].Add(_data[_index][i]/4.78);
        }
        //Output data to console
        Console.WriteLine(_index + ":");
        Console.WriteLine(string.Join(":", _data[_index]));
        Console.WriteLine();
        //Switch between index 0 and 1
        _index = 1 - _index;
    }

    private static void Main()
    {
        //Setup lists
        for (var i = 0; i < 2; i++)
        {
            _data.Add(new List<int>());
            _dataprevious.Add(new List<int>());
            _datacalculated.Add(new List<double>());
        }
        //Get new data every 5 seconds
        new Timer(GetData, null, 0, 5000);
        Console.ReadLine();
    }
}

1 ответ

Решение

приведет ли это к низкой производительности

Производительность относительно. Здесь другие операции, которые вы делаете, полностью доминируют в (нескольких) обращениях к списку. Если вы кешируете _data[_index] (и другие) в локальных переменных, тогда вы столкнетесь с одним доступом к списку за 64 итерации, что является ничем.

Вы можете окончательно ответить на этот вопрос, профилировав код. Но обратные вычисления конверта, такие как the в предыдущем параграфе, также действительны и могут сэкономить некоторое время.

Другие вопросы по тегам