바이트는 분명히 균등하게 분배되지 않습니다.
내가 함께 .NET GUID를 샘플링하고 분배 플롯하는 몇 가지 코드를 넣어 모든 테스트 코드의
먼저,이 100 만 GUID를 생성하고 바이트 배열의 각 바이트에 대해 서로 다른 값의 수를 계산 . 그것은 모든 것을 Scilab에 그려진 매트릭스로 출력합니다. 여기
int[,] counter = new int[16, 256];
for (int i = 0; i < 1000000; i++)
{
var g = Guid.NewGuid();
var bytes = g.ToByteArray();
for (int idx = 0; idx < 16; idx++)
{
counter[idx, bytes[idx]]++;
}
}
StringBuilder sb = new StringBuilder();
sb.AppendLine("x = [");
for (int idx = 0; idx < 16; idx++)
{
for (int b = 0; b < 256; b++)
{
sb.Append(counter[idx, b]);
if (idx != 255)
{
sb.Append(" ");
}
}
if (idx != 15)
{
sb.AppendLine(";");
}
}
sb.AppendLine("]");
File.WriteAllText("plot.sce", sb.ToString());
이 그래프 바이트 배열의 각각의 위치에 대한 각각의 고유 값의 개수를 플롯 분포이다 :
바이트 배열의 위치 0-6에 대한 값 분포 :
바이트 배열의 위치 (7)에 대한 값 분포 :
바이트 배열에서의 위치 (8)에 대한 값 분포 :
,210
값 바이트 배열의 위치 9-15에 대한 분포 : 바이트 위치에 대한
0-6 및 9-15 값의 분포에도 것으로 보이지만, 바이트 위치 (7) 및 (8)에 대한 배포가 상당히 제한적입니다. GUID를 들면
위치 (7) 79 (0x4F) 내지 64 (× 40)의 값을 취할 수
{1369ea05-b9f9-408b-ac7c-7ebd0f35d562}
1 1 1 1 1 1
3 2 1 0 5 4 7 6 8 9 0 1 2 3 4 5
(아래 바이트 위치의 시작과는 이상한 순서를 참고).
위치 8은 128 (0x80)에서 191 (0xBF)까지의 값을 취할 수 있습니다.
나머지 바이트는 고르게 분포됩니다.
참고 : 테스트는 .NET 기반의 32 비트 Windows 7 시스템에서 실행되었습니다.
학습 : 물건을 시험하지 마십시오.
Answer :로드 균형 조정을 계산하는 데 .NET Guids를 사용하려면 위의 Guid에서 7 및 8로 표시된 위치를 제외한 다른 부분을 사용할 수 있습니다.
질문 : 배포본이 균등하게 배포되지 않는 이유는 누구입니까?
와우, 알빈. 당신은 그것을 얻었습니다! 고맙습니다. BTW :이 답변에 대한 의견은 비트가 pos 7 & 8에서 균일하지 않은 이유에 대한 단서를 제공합니다. http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in- javascript/105074 # 105074 아마도 비트 중 일부는 GUID의 생성 방법/출처에 대한 세부 정보를 제공합니까? –
아, 일부 알고리즘 정보에 대한 버전 정보 및 마커. –