摘要:關於轉型的效能小測試...
我們直接看CODE!!
private static void GetTest()
{
float ANumber_1 = 1.0f;
float BNumber_1 = 0.2f;
Stopwatch sw = new Stopwatch();
#region unboxing
sw.Reset();
sw.Start();
for (int i = 0; i < 1000000; i++)
{
if (Math.Round((ANumber_1 / BNumber_1), 1, MidpointRounding.AwayFromZero) >= 5)
{
//Do Something
}
}
sw.Stop();
Console.WriteLine("Math-TotalCost-" + sw.ElapsedMilliseconds + " 毫秒");
#endregion
#region boxing
sw.Reset();
sw.Start();
for (int i = 0; i < 1000000; i++)
{
if (Convert.ToInt32(ANumber_1 / BNumber_1) >= 5)
{
//Do Something
}
}
sw.Stop();
Console.WriteLine("boxing-TotalCost-" + sw.ElapsedMilliseconds + " 毫秒");
#endregion
#region Double
sw.Reset();
sw.Start();
for (int i = 0; i < 1000000; i++)
{
if (Convert.ToDouble(ANumber_1 / BNumber_1) >= 5)
{
//Do Something
}
}
sw.Stop();
Console.WriteLine("Double-TotalCost-" + sw.ElapsedMilliseconds + " 毫秒");
#endregion
#region Integer First
sw.Reset();
sw.Start();
int ANumber_2 = Convert.ToInt32(ANumber_1 * 10);
int BNumber_2 = Convert.ToInt32(BNumber_1 * 10);
for (int i = 0; i < 1000000; i++)
{
if (ANumber_2 / BNumber_2 >= 5)
{
//Do Something
}
}
sw.Stop();
Console.WriteLine("Integer-TotalCost-" + sw.ElapsedMilliseconds + " 毫秒");
#endregion
}
測試結果如下
範例中沒有使用強制轉換(int)的方式來做
因為Float在強制轉換為int過程中因為精度與取值範圍上的不同
造成運算結果會產生不如預期現象.
至於Float強制轉換int 為什麼會丟失精度的問題就讓各位自行尋找了!!
