值類型和引用類型在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號