用C#哪个更快 - System.Convert.ToString(objThatIsString)或(string)objThatIsString?

4 c# string

或objThatIsString.ToString()正如在aswers中指出的那样..更快更聪明..

Mar*_*arc 18

@thijs:这是一个快速测试:

public class ToStringTest
{
    private object mString = "hello world!";
    Stopwatch sw = new Stopwatch();
    private List<long> ConvertToStringTimes = new List<long>();
    private List<long> ToStringTimes = new List<long>();
    private List<long> CastToStringTimes = new List<long>();

    public ToStringTest()
    {

        for (int i = 0; i < 100000; i++)
        {
            sw.Start();
            ConvertToString();
            sw.Stop();
            ConvertToStringTimes.Add(sw.ElapsedTicks);
            sw.Reset();

            sw.Start();
            ToString();
            sw.Stop();
            ToStringTimes.Add(sw.ElapsedTicks);
            sw.Reset();

            sw.Start();
            CastToString();
            sw.Stop();
            CastToStringTimes.Add(sw.ElapsedTicks);
            sw.Reset();    
        }
        Console.WriteLine("Average elapsed ticks after converting {0} strings",ConvertToStringTimes.Count);
        Console.WriteLine("ConvertToString: {0} ticks", ConvertToStringTimes.Average() );
        Console.WriteLine("ToString: {0} ticks", ToStringTimes.Average());
        Console.WriteLine("CastToString: {0} ticks",  CastToStringTimes.Average());
    }

    private string ConvertToString()
    {
        return Convert.ToString(mString);
    }

    public override string ToString()
    {
        return mString.ToString();
    }

    public string CastToString()
    {
        return (string) mString;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是:

转换100000个字符串后平均经过的刻度

ConvertToString:611.97372 ticks

ToString:586.51461蜱虫

CastToString:582.25266 ticks


Mar*_*ell 14

除了运行时类型检查之外,直接强制转换不需要进行任何检查 - 我希望转换更快.

你可能也想考虑一下objThatIsString.ToString(); 因为(string这)只是return this;,它应该很快 - 当然比快Convert.ToString.然后竞争在运行时类型检查和虚拟呼叫之间; 实际上,两者都非常非常快.


Guf*_*ffa 5

演员阵容更快.

Convert.ToString最终将做一些开销后获得的铸造.它实际上是以尝试将其强制转换为其形式IConvertible,然后ToString在其上调用虚方法.所以,这是实际投射的虚拟调用String.