Home All Groups Group Topic Archive Search About

Convert String To Guid

Author
15 May 2006 1:38 PM
Martin Moser
Does somebody know if there's a faster way to convert a string to a guid, than:

    Try
      gID = New Guid(myString)
    Catch ex As Exception
      gID = Guid.Empty
    End Try

even if it's not clear that the string contains a valid guid?

tia
Martin
Author
15 May 2006 2:16 PM
sloan
Exception handling is expensive.... and this if this is not "exceptional",
as in....only happens in a blue moon, Id avoid the try/catch

From
http://geekswithblogs.net/jawad/archive/2005/05/20/GuidVerifier.aspx

private static Regex isGuid = new
Regex(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F
]{4}\-[0-9a-fA-F]{12}(\}){0,1}$", RegexOptions.Compiled);

                                    internal static bool IsGuid(string
candidate, out Guid output)

                                    {

                                                bool isValid = false;

                                                output=Guid.Empty;

                                                if(candidate!=null)

                                                {



                                                            if
(isGuid.IsMatch(candidate))

                                                            {


output=new Guid(candidate);


isValid = true;

                                                            }

                                                }

                                                return isValid;

                                    }



rewrite that as your procedure.  it avoids the try/catch, and gets the
purpose accomplished.



Show quoteHide quote
"Martin Moser" <MartinMo***@discussions.microsoft.com> wrote in message
news:D5632D53-59D9-4434-8000-B3C97722288D@microsoft.com...
> Does somebody know if there's a faster way to convert a string to a guid,
than:
>
>     Try
>       gID = New Guid(myString)
>     Catch ex As Exception
>       gID = Guid.Empty
>     End Try
>
> even if it's not clear that the string contains a valid guid?
>
> tia
> Martin
Are all your drivers up to date? click for free checkup

Author
15 May 2006 2:49 PM
Martin Moser
Hi,

I've already tried to use RegularExpressions. RegEx is faster if the string
doesn't contain a valid guid, but it's slower if the string contains a valid
guid.


Show quoteHide quote
"sloan" wrote:

> Exception handling is expensive.... and this if this is not "exceptional",
> as in....only happens in a blue moon, Id avoid the try/catch
>
> From
> http://geekswithblogs.net/jawad/archive/2005/05/20/GuidVerifier.aspx
>
> private static Regex isGuid = new
> Regex(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F
> ]{4}\-[0-9a-fA-F]{12}(\}){0,1}$", RegexOptions.Compiled);
>
>                                     internal static bool IsGuid(string
> candidate, out Guid output)
>
>                                     {
>
>                                                 bool isValid = false;
>
>                                                 output=Guid.Empty;
>
>                                                 if(candidate!=null)
>
>                                                 {
>
>
>
>                                                             if
> (isGuid.IsMatch(candidate))
>
>                                                             {
>
>
> output=new Guid(candidate);
>
>
> isValid = true;
>
>                                                             }
>
>                                                 }
>
>                                                 return isValid;
>
>                                     }
>
>
>
> rewrite that as your procedure.  it avoids the try/catch, and gets the
> purpose accomplished.
>
>
>
> "Martin Moser" <MartinMo***@discussions.microsoft.com> wrote in message
> news:D5632D53-59D9-4434-8000-B3C97722288D@microsoft.com...
> > Does somebody know if there's a faster way to convert a string to a guid,
> than:
> >
> >     Try
> >       gID = New Guid(myString)
> >     Catch ex As Exception
> >       gID = Guid.Empty
> >     End Try
> >
> > even if it's not clear that the string contains a valid guid?
> >
> > tia
> > Martin
>
>
>
Author
16 May 2006 3:40 AM
Gaurav Vaish (EduJini.IN)
You have three options:

1. Use Guid(string) constructor
2. Use RegEx
3. Use custom string parser (sequential and not RegEx based)

You are not happy with (1) and (2).
(3) is the only option left... but that may end up being a copy of (1)

However, if the data that you have is in some specific format, say, '{' is
always present or '-' is always absent, your (3) may be faster than (1)
(1) looks for all possibilities, presence of '{', presence of '-' etc making
it slow.

No other option comes to my mind than the above.

--
Cheers,
Gaurav Vaish
http://www.mastergaurav.org
http://www.edujini.in
-------------------


Show quoteHide quote
"Martin Moser" <MartinMo***@discussions.microsoft.com> wrote in message
news:AFB26257-46FA-46B7-AD56-FBA58701EFF1@microsoft.com...
> Hi,
>
> I've already tried to use RegularExpressions. RegEx is faster if the
> string
> doesn't contain a valid guid, but it's slower if the string contains a
> valid
> guid.
>
>
> "sloan" wrote:
>
>> Exception handling is expensive.... and this if this is not
>> "exceptional",
>> as in....only happens in a blue moon, Id avoid the try/catch
>>
>> From
>> http://geekswithblogs.net/jawad/archive/2005/05/20/GuidVerifier.aspx
>>
>> private static Regex isGuid = new
>> Regex(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F
>> ]{4}\-[0-9a-fA-F]{12}(\}){0,1}$", RegexOptions.Compiled);
>>
>>                                     internal static bool IsGuid(string
>> candidate, out Guid output)
>>
>>                                     {
>>
>>                                                 bool isValid = false;
>>
>>                                                 output=Guid.Empty;
>>
>>                                                 if(candidate!=null)
>>
>>                                                 {
>>
>>
>>
>>                                                             if
>> (isGuid.IsMatch(candidate))
>>
>>                                                             {
>>
>>
>> output=new Guid(candidate);
>>
>>
>> isValid = true;
>>
>>                                                             }
>>
>>                                                 }
>>
>>                                                 return isValid;
>>
>>                                     }
>>
>>
>>
>> rewrite that as your procedure.  it avoids the try/catch, and gets the
>> purpose accomplished.
>>
>>
>>
>> "Martin Moser" <MartinMo***@discussions.microsoft.com> wrote in message
>> news:D5632D53-59D9-4434-8000-B3C97722288D@microsoft.com...
>> > Does somebody know if there's a faster way to convert a string to a
>> > guid,
>> than:
>> >
>> >     Try
>> >       gID = New Guid(myString)
>> >     Catch ex As Exception
>> >       gID = Guid.Empty
>> >     End Try
>> >
>> > even if it's not clear that the string contains a valid guid?
>> >
>> > tia
>> > Martin
>>
>>
>>
Author
16 May 2006 7:33 AM
Stephen Ahn
> 3. Use custom string parser (sequential and not RegEx based)

For this option, you could always use a freely available tool (eg.
Salamander, dotnet Reflector), to see exactly what "public Guid(string str)"
does. This would ensure that your custom code worked exactly like the
framework's code, except you'd change your version so that it would not
raise exceptions and return false instead.

Stephen

Bookmark and Share