Guid.Parse () или новый Guid () - какая разница? - PullRequest
64 голосов
/ 02 августа 2011

В чем разница между этими двумя способами преобразования строки в System.Guid? Есть ли причина выбирать один над другим?

var myguid = Guid.Parse("9546482E-887A-4CAB-A403-AD9C326FFDA5");

или

var myguid = new Guid("9546482E-887A-4CAB-A403-AD9C326FFDA5");

Ответы [ 4 ]

76 голосов
/ 02 августа 2011

Быстрый просмотр Reflector показывает, что оба они в значительной степени эквивалентны.

23 голосов
/ 02 августа 2011

Используйте версию, которая наиболее читаема для вас. Они реализованы практически одинаково.

Единственное реальное отличие состоит в том, что конструктор инициализируется до Guid.Empty перед попыткой анализа. Однако эффективный код идентичен.

При этом, если Guid исходит от пользовательского ввода, то Guid.TryParse будет лучше, чем любой из вариантов. Если это Guid жестко закодировано и всегда допустимо, то любой из вышеперечисленных вариантов вполне приемлем.

11 голосов
/ 10 июля 2013

Я попробовал производительность на одном миллионе гидов и Guid. Парс кажется незначительно быстрее. Это делало разницу в 10-20 миллисекод в 800 миллисекунд от общего количества созданных на моем ПК.

public class Program
{
    public static void Main()
    {
        const int iterations = 1000 * 1000;
        const string input = "63559BC0-1FEF-4158-968E-AE4B94974F8E";

        var sw = Stopwatch.StartNew();
        for (var i = 0; i < iterations; i++)
        {
            new Guid(input);
        }
        sw.Stop();

        Console.WriteLine("new Guid(): {0} ms", sw.ElapsedMilliseconds);

        sw = Stopwatch.StartNew();
        for (var i = 0; i < iterations; i++)
        {
            Guid.Parse(input);
        }
        sw.Stop();

        Console.WriteLine("Guid.Parse(): {0} ms", sw.ElapsedMilliseconds);
    }
}

И вывод:

новый Guid (): 804 мс

Guid.Parse (): 791 мс

1 голос
/ 02 августа 2011

Я бы пошел с TryParse. Это не исключение.

...