我有一个使用大约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();
}
}
答案 0 :(得分:0)
会导致表现不佳
表现是相对的。在这里,您正在进行的其他操作完全支配(少数)列表访问。如果将_data[_index]
(和其他)缓存在局部变量中,那么每64次迭代将面临一次列表访问,这一点都没有。
您可以通过分析代码来明确回答这个问题。但是后面的信封计算(如前一段中的内容)也是有效的,可以节省一些时间。