仅对两个索引使用交错列表
Using jagged list for only two indexes
我有一个应用程序使用了大约 5 个不同的 "list of lists",但我只使用索引 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();
}
}
will it lead to poor performance
性能是相对的。在这里,您正在执行的其他操作完全控制了(少数)列表访问。如果您在局部变量中缓存 _data[_index]
(和其他),那么您将每 64 次迭代面临一次列表访问,这没什么。
您可以通过分析代码明确地回答这个问题。但是上一段中的粗略计算也是有效的,可以节省一些时间。
我有一个应用程序使用了大约 5 个不同的 "list of lists",但我只使用索引 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();
}
}
will it lead to poor performance
性能是相对的。在这里,您正在执行的其他操作完全控制了(少数)列表访问。如果您在局部变量中缓存 _data[_index]
(和其他),那么您将每 64 次迭代面临一次列表访问,这没什么。
您可以通过分析代码明确地回答这个问题。但是上一段中的粗略计算也是有效的,可以节省一些时间。