值类型和引用类型在hashtable里面存取的性能比较
public interface ITest2
{3
void M();4
}5
public class Test1:ITest6
{7
public void M()8
{9
}10
}11
class Test12
{13
public Test()14
{15
}16
}
static void Main(string[] args)2
{ 3
Hashtable table = new Hashtable();4

5
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();6
stopWatch.Start();7
for (int i = 0; i < CompareCount; i++)8
{9
table.Add(i,new Test());10
}11
stopWatch.Stop();12
13
for (int i = 0; i < CompareCount; i++)14
{15
Test o = table[i] as Test;16
}17
18
string t1 = stopWatch.ElapsedTicks.ToString();19
20
Hashtable table1 = new Hashtable();21
System.Diagnostics.Stopwatch stopWatch1 = new System.Diagnostics.Stopwatch();22
stopWatch1.Start();23
for (int i = 0; i < CompareCount; i++)24
{25
table1.Add(i, i);26
}27
stopWatch1.Stop();28
29
for (int i = 0; i < CompareCount; i++)30
{31
int o = (int)table1[i];32
}33
34
string t2 = stopWatch1.ElapsedTicks.ToString();35
Hashtable table2 = new Hashtable();36
System.Diagnostics.Stopwatch stopWatch2 = new System.Diagnostics.Stopwatch();37
stopWatch2.Start();38
for (int i = 0; i < CompareCount; i++)39
{40
ITest test2 = new Test1();41
table2.Add(i,test2);42
}43

44
stopWatch2.Stop();45
for (int i = 0; i < CompareCount; i++)46
{47
ITest o = table2[i] as ITest;48
}49
50
string t3 = stopWatch2.ElapsedTicks.ToString();51
Console.WriteLine(t1);52
Console.WriteLine(t2);53
Console.WriteLine(t3);54
Console.WriteLine(((double)Convert.ToInt64(t1)/Convert.ToInt64(t2)).ToString());55
Console.WriteLine(((double)Convert.ToInt64(t3) / Convert.ToInt64(t2)).ToString());56
Console.Read();57
58
}
static void Main(string[] args)2
{ 3
Hashtable table = new Hashtable();4
5
for (int i = 0; i < CompareCount; i++)6
{7
table.Add(i,new Test());8
}9
10
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();11
stopWatch.Start();12
for (int i = 0; i < CompareCount; i++)13
{14
Test o = table[i] as Test;15
}16
stopWatch.Stop();17
string t1 = stopWatch.ElapsedTicks.ToString();18
19
Hashtable table1 = new Hashtable();20
21
for (int i = 0; i < CompareCount; i++)22
{23
table1.Add(i, i);24
}25
26
System.Diagnostics.Stopwatch stopWatch1 = new System.Diagnostics.Stopwatch();27
stopWatch1.Start();28
for (int i = 0; i < CompareCount; i++)29
{30
int o = (int)table1[i];31
}32
stopWatch1.Stop();33
string t2 = stopWatch1.ElapsedTicks.ToString();34
Hashtable table2 = new Hashtable();35
36
for (int i = 0; i < CompareCount; i++)37
{38
ITest test2 = new Test1();39
table2.Add(i,test2);40
}41
42
System.Diagnostics.Stopwatch stopWatch2 = new System.Diagnostics.Stopwatch();43
stopWatch2.Start();44
for (int i = 0; i < CompareCount; i++)45
{46
ITest o = table2[i] as ITest;47
}48
stopWatch2.Stop();49
string t3 = stopWatch2.ElapsedTicks.ToString();50
Console.WriteLine(t1);51
Console.WriteLine(t2);52
Console.WriteLine(t3);53
Console.WriteLine(((double)Convert.ToInt64(t1)/Convert.ToInt64(t2)).ToString());54
Console.WriteLine(((double)Convert.ToInt64(t3) / Convert.ToInt64(t2)).ToString());55
Console.Read();56
57
}测试结果
Add
1) 调试(1)
|
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
|
int |
100000 |
227960 |
1 |
|
class |
100000 |
138122 |
0.6059 |
|
Interface |
100000 |
103693 |
0.4549 |
调试(2)
|
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
|
int |
100000 |
282564 |
1 |
|
class |
100000 |
156588 |
0.5542 |
|
Interface |
100000 |
148623 |
0.5230 |
2)
运行(1)
|
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
|
int |
100000 |
155927 |
1 |
|
class |
100000 |
191537 |
1.2284 |
|
Interface |
100000 |
127647 |
0.8186 |
运行(2)
|
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
|
int |
100000 |
151806 |
1 |
|
class |
100000 |
222375 |
1.4649 |
|
Interface |
100000 |
256467 |
1.6894 |
运行(3)
|
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
|
int |
100000 |
99465 |
1 |
|
class |
100000 |
235016 |
2.3628 |
|
Interface |
100000 |
201519 |
2.0260 |
从上面几个表可以得出,在向Hashtable里面添加数据的时候,当value为值类型的时候最快,interface次之,class慢
2. 查询
1. 调试(1)
|
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
|
int |
100000 |
52360 |
1 |
|
class |
100000 |
71250 |
1.3608 |
|
Interface |
100000 |
291566 |
5.5685 |
2.
调试(2)
|
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
|
int |
100000 |
53645 |
1 |
|
class |
100000 |
55679 |
1.0379 |
|
Interface |
100000 |
310780 |
5.7932 |
运行(1)
|
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
|
int |
100000 |
53013 |
1 |
|
class |
100000 |
55414 |
1.0453 |
|
Interface |
100000 |
282835 |
5.3352 |
运行(2)
|
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
|
int |
100000 |
53647 |
1 |
|
class |
100000 |
66768 |
1.2446 |
|
Interface |
100000 |
204599 |
3.8138 |
在查询哈希表的时候,int最快,class次之,interface比较慢
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


浙公网安备 33010602011771号