문자열을 변환하는이 두 가지 방법의 차이점은 무엇입니까 System.Guid
? 하나를 선택해야하는 이유가 있습니까?
var myguid = Guid.Parse("9546482E-887A-4CAB-A403-AD9C326FFDA5");
또는
var myguid = new Guid("9546482E-887A-4CAB-A403-AD9C326FFDA5");
문자열을 변환하는이 두 가지 방법의 차이점은 무엇입니까 System.Guid
? 하나를 선택해야하는 이유가 있습니까?
var myguid = Guid.Parse("9546482E-887A-4CAB-A403-AD9C326FFDA5");
또는
var myguid = new Guid("9546482E-887A-4CAB-A403-AD9C326FFDA5");
답변:
Reflector를 빠르게 살펴보면 둘 다 거의 동일하다는 것을 알 수 있습니다.
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;
}
OverflowException
이 던져 지면의 FormatException
경우에 캡슐화된다는 것 입니다 Guid.Parse
.
1 백만 개의 guid와 Guid에서 성능을 시도했습니다 .Parse는 상당히 빠른 것 같습니다. 내 PC에서 총 생성 시간이 800 밀리 초라는 10-20 밀리 초 차이를 만들었습니다.
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 () : 804ms
Guid. Parse () : 791ms
나는 함께 갈 것이다 TryParse
. 예외가 발생하지 않습니다.
TryParse
항상 사용하면 엄청난 문제와 잘못된 코드 경로가 발생합니다. 완전히 잘못된 시나리오를 처리하고 코드를 더 복잡하고 취약하게 만드는 것보다 Parse
값이 a Guid
이고 그렇지 않은 경우 빠르게 실패 한다는 것을 알고있을 때 사용하는 것이 좋습니다 .
.Net 프레임 워크에서 v1.1은 한 가지 방법으로 만 존재합니다.-> var myguid = new Guid ( "9546482E-887A-4CAB-A403-AD9C326FFDA5");
Guid.Parse는 나중에 사용할 수있게되었습니다.