Использование зубчатого списка только для двух индексов
У меня есть приложение, которое использует около 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 в предыдущем параграфе, также действительны и могут сэкономить некоторое время.