主要是测试遍历消耗的时间和内存
测试案例
int Num = 10000;
int CN = 100;
List<string> list = new List<string>();
string[] Arr = new string[Num];
Dictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < Num; i++)
{
var s = i.toString();
list.Add(s);
Arr[i] = s;
dic.Add(i, s);
}
debug.ShowCalculate();
System.GC.Collect();
debug.log("dic to All Array []");
debug.TestRunTime(() =>
{
string ss;
for (int j = 0; j < CN; j++)
{
var Carr = new List<string>(dic.Values).ToArray();
for (int i = 0; i < Carr.Length; i++)
{
ss = Carr[i];
}
}
});
debug.log("dic to Keys list []");
debug.TestRunTime(() =>
{
string ss;
for (int j = 0; j < CN; j++)
{
var Carr = new List<int>(dic.Keys);
for (int i = 0; i < Carr.Count; i++)
{
ss = dic[Carr[i]];
}
}
});
debug.log("dic Enumerator");
debug.TestRunTime(() =>
{
string ss;
for (int j = 0; j < CN; j++)
{
var e = dic.GetEnumerator();
while (e.MoveNext())
{
ss = e.Current.Value;
}
}
});
debug.log("list []");
debug.TestRunTime(() =>
{
string ss;
for (int j = 0; j < CN; j++)
{
for (int i = 0; i < list.Count; i++)
{
ss = list[i];
}
}
});
debug.log("Arr []");
debug.TestRunTime(() =>
{
string ss;
for (int j = 0; j < CN; j++)
for (int i = 0; i < Arr.Length; i++)
{
ss = Arr[i];
}
});
System.GC.Collect();
debug.ShowCalculate();
测试结果
//测试消耗时间
public static void TestRunTime(Action LogicalSegment)
{
sw.Reset();
sw.Start();
LogicalSegment.Invoke();
sw.Stop();
log("运行时间:", sw.ElapsedMilliseconds, "毫秒");
}
//测试消耗内存
public static void TestMemoryWatcher(Action action)
{
double start = GC.GetTotalMemory(true);
action();
GC.Collect();
double end = GC.GetTotalMemory(true);
double useMemory = (end - start) / 1024;
log("运行内存:", useMemory,"M");
}