Convert.ChangeType或Convert.ToInt32之间的主要区别是什么?

时间:2011-01-21 07:23:39

标签: c#

在Convert.ChangeType或Convert.ToInt32或int.Parse

之间是否有任何性能优势

4 个答案:

答案 0 :(得分:8)

如果您知道自己要将string转换为Int32,那么使用Convert.ChangeType似乎是一种模糊的方式。我肯定更喜欢其他任何一种电话。

int.ParseConvert.ToInt32(x)之间的主要区别在于Convert.ToInt32(null)返回0,而int.Parse(null)将引发异常。当然,int.Parse还可以让您更好地控制使用何种文化。

我非常怀疑一个人对另一个人有任何性能上的好处:我会期待 Convert.ToInt32来呼叫int.Parse而不是反过来 - 但它不是记录以这种方式工作,并且单个方法调用的命中不太可能是重要的。 (无论如何,它可能会被内联。)

答案 1 :(得分:5)

private const int maxValue = 1000000;
    static void Main(string[] args)
    {
        string[] strArray = new string[maxValue];
        for (int i = 0; i < maxValue; i++)
        {
            strArray[i] = i.ToString();
        }
        int[] parsedNums = new int[maxValue];
        CalcChangeTypePerf(strArray,parsedNums);
        CalcToInt32Perf(strArray, parsedNums);
        CalcIntParse(strArray, parsedNums);
    }
    public static void CalcChangeTypePerf(string[] strArray,int[] parsedArray)
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        for (int i = 0; i < maxValue; i++)
        {
            parsedArray[i] = (int)Convert.ChangeType(strArray[i], typeof(int));
        }
        stopwatch.Stop();
        Console.WriteLine("{0} on CalcChangeTypePerf", stopwatch.ElapsedMilliseconds);
    }
    public static void CalcToInt32Perf(string[] strArray, int[] parsedArray)
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        for (int i = 0; i < maxValue; i++)
        {
            parsedArray[i] = Convert.ToInt32(strArray[i]);
        }
        stopwatch.Stop();
        Console.WriteLine("{0} on CalcToInt32Perf", stopwatch.ElapsedMilliseconds);
    }
    public static void CalcIntParse(string[] strArray, int[] parsedArray)
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        for (int i = 0; i < maxValue; i++)
        {
            parsedArray[i] = int.Parse(strArray[i]);
        }
        stopwatch.Stop();
        Console.WriteLine("{0} on CalcIntParse", stopwatch.ElapsedMilliseconds);
    }

这个简单的测试结果是

266 on CalcChangeTypePerf
167 on CalcToInt32Perf
165 on CalcIntParse

答案 2 :(得分:0)

Convert.ToInt32比使用Convert.ChangeType更好。

ChangeType是一种通用转换方法,它将value指定的对象转换为conversionType。 ToInt32特定于int32类型。

答案 3 :(得分:0)

简单测试显示Parse()是最快的方法,下一个Convert.ToInt32()和最后Convert.ChangeType()

static void Main(string[] args)
{
    string s = "104563";
    int a = 1;

    for (int k = 0; k < 4; k++)
    {
        Stopwatch w = Stopwatch.StartNew();
        for (int i = 0; i < 10000000; i++)
            a = (int)Convert.ChangeType(s, typeof(int));
        w.Stop();

        Console.WriteLine("ChangeType={0}", w.ElapsedMilliseconds);

        Stopwatch w1 = Stopwatch.StartNew();
        for (int i = 0; i < 10000000; i++)
            a = Convert.ToInt32(s);
        w1.Stop();

        Console.WriteLine("ToInt32={0}", w1.ElapsedMilliseconds);

        Stopwatch w2 = Stopwatch.StartNew();
        for (int i = 0; i < 10000000; i++)
            a = Int32.Parse(s);
        w2.Stop();
        Console.WriteLine("Parse={0}", w2.ElapsedMilliseconds);
    }

    Console.ReadLine();
}

结果是:

ChangeType=2422
ToInt32=1859
Parse=1760
ChangeType=2374
ToInt32=1857
Parse=1762
ChangeType=2378
ToInt32=1860
Parse=1763
ChangeType=2375
ToInt32=1855
Parse=1759