關於轉型的效能小測試...

  • 1954
  • 0

摘要:關於轉型的效能小測試...

我們直接看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 為什麼會丟失精度的問題就讓各位自行尋找了!!