2017-01-19 13 views
0

私は、次のシーケンシャルGUIDを作成するhttp://www.dbdelta.com/improving-uniqueidentifier-performance/からcodesnippedコピー:私を混乱させる何Sequential Guidsの作成時にRPC_S_UUID_LOCAL_ONLYはどれくらい重要ですか?

private static Guid NewSequentialGuid() 
     { 
      const int S_OK = 0; 
      const int RPC_S_UUID_LOCAL_ONLY = 1824; 

      Guid oldGuid = Guid.Empty; 

      int result = UuidCreateSequential(ref oldGuid); 
      if (result != S_OK && result != RPC_S_UUID_LOCAL_ONLY) 
      { 
       throw new ExternalException("UuidCreateSequential call failed", result); 
      } 

      byte[] oldGuidBytes = oldGuid.ToByteArray(); 
      byte[] newGuidBytes = new byte[16]; 
      oldGuidBytes.CopyTo(newGuidBytes, 0); 

      // swap low timestamp bytes (0-3) 
      newGuidBytes[0] = oldGuidBytes[3]; 
      newGuidBytes[1] = oldGuidBytes[2]; 
      newGuidBytes[2] = oldGuidBytes[1]; 
      newGuidBytes[3] = oldGuidBytes[0]; 

      // swap middle timestamp bytes (4-5) 
      newGuidBytes[4] = oldGuidBytes[5]; 
      newGuidBytes[5] = oldGuidBytes[4]; 

      // swap high timestamp bytes (6-7) 
      newGuidBytes[6] = oldGuidBytes[7]; 
      newGuidBytes[7] = oldGuidBytes[6]; 

      //remaining 8 bytes are unchanged (8-15) 

      return new Guid(newGuidBytes); 

     } 

は、&& result != RPC_S_UUID_LOCAL_ONLYチェックです。私はなぜ/いつ私がこの値をチェックするべきでないかを理解していない。

誰か明確にしていただけますか?私はこのチェックを外すことができますか?それとも私は問題に遭遇しますか?

+0

この方法について[documentation](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379322(v = vs.85).aspx)を読んだことがありますか?備考セクションは、その成功コードで生成された値に頼りにしたくない理由を説明する、まともな仕事(IMO)を行います。 –

+0

はい、私はそれを読んでいますが、この行は私を混乱させます。「イーサネット/トークンリングアドレスを持つコンピュータは、グローバルに一意であることが保証されているUUIDを生成します」 - あなたはこのチェックをすべて使用したいと思うが、編集:nvm、今私はそれを理解した。 D'OH – FullStackDAU

答えて

0

ありがとうございます@Damnien_The_Unbeliever私の目を明らかにするためです。

+0

このコメントは不要です。削除することを検討してください。これはAnswersのセクションです – Stephen

関連する問題