идентификатор GUID.Parse () или new Guid () - какая разница?
в чем разница между этими двумя способами преобразования строки в System.Guid? Есть причина, чтобы выбрать один над другим?
var myguid = Guid.Parse("9546482E-887A-4CAB-A403-AD9C326FFDA5");
или
var myguid = new Guid("9546482E-887A-4CAB-A403-AD9C326FFDA5");
4 ответов:
быстрый взгляд на отражатель показывает, что оба они в значительной степени эквивалентны.
public Guid(string g) { if (g == null) { throw new ArgumentNullException("g"); } this = Empty; GuidResult result = new GuidResult(); result.Init(GuidParseThrowStyle.All); if (!TryParseGuid(g, GuidStyles.Any, ref result)) { throw result.GetGuidParseException(); } this = result.parsedGuid; } public static Guid Parse(string input) { if (input == null) { throw new ArgumentNullException("input"); } GuidResult result = new GuidResult(); result.Init(GuidParseThrowStyle.AllButOverflow); if (!TryParseGuid(input, GuidStyles.Any, ref result)) { throw result.GetGuidParseException(); } return result.parsedGuid; }
используйте версию, которая является наиболее читаемой для вас. Оба они реализованы почти точно так же.
единственное реальное различие заключается в том, что конструктор инициализирует себя в
Guid.Emptyперед попыткой разбора. Однако эффективный код идентичен.это, как говорится, если
Guidисходит из пользовательского ввода, затемGuid.TryParseбыло бы лучше, чем любой из вариантов. Если этоGuidжестко закодирован и всегда действителен, любой из вышеперечисленных отлично разумные варианты.
я попробовал производительность на одном миллионе GUID и 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 ms
Guid.Parse (): 791 ms
Comments