2012-01-19 17 views
5

Sé que puede explotar en la generación de GUID en máquinas únicas y múltiples y es estadísticamente poco probable que alguna vez genere el mismo GUID dos veces.¿Los GUID generados en dispositivos Windows CE que usan .NET Compact Framework 3.5 aún son estadísticamente únicos?

Hay mucha información en internet que lo demuestra.

¿Se puede decir lo mismo de 100s de Windows CE 4, 5 & 6 dispositivos que ejecutan aplicaciones basadas en .NET Compact Framework 3.5 que generan GUID?

Supongo que sí, pero no puedo encontrar ninguna información que demuestre que el sistema operativo WinCE utiliza números aleatorios y que son convenientemente aleatorios.

¿Alguien puede proporcionar dicha información y referencias?

Gracias,

J.

+1

Pregunta móvil perpetuo de Stackoverflow. –

+0

En un nodo lateral: no existe un número aleatorio :-) – Matten

+0

¡Ah sí, pero esta vez está en Windows CE! Entonces, es una pregunta completamente diferente ...;) – RoboJ1M

Respuesta

6

Desde un early article el GUID para el .NET Compact Framework

El equipo de .NET Compact Framework compensaciones realizadas constantemente entre el tamaño de la huella marco, el rendimiento y tiempo de implementación. El método completo de .NET Framework Guid.NewGuid llama a la función API de Windows CoCreateGuid que llama a UuidCreate para generar números únicos de 128 bits globales. Desafortunadamente, estas funciones no son compatibles con el Pocket PC , por lo que el método Guid.NewGuid no se implementó para .NET Compact Framework.

En este artículo se propone un algoritmo que es igual a la versión de Windows

Resulta que es fácil escribir una implementación personalizada del método Guid.NewGuid . A continuación, se muestra una aplicación de prueba que genera GUID en la Pocket PC. Utiliza una clase personalizada denominada PocketGuid, que utiliza el mismo algoritmo que los GUID de escritorio y es que se analizará con más detalle más adelante en este documento.

Desde 2.0 el marco compacto actual contiene el método Guid.NewGuid, yo creo que incluyen el código mencionado que resulta en la misma robustez/singularidad de GUID en la mueca de dolor.

+0

Creo que mi mejor solución es decir que el método .NET 2.0 CF para crear un GUID usa el mismo método en el ejemplo de PocketGuid. – RoboJ1M

+0

Aunque ya he tenido que argumentar que el método para obtener un método aleatorio en PocketGuid es lo suficientemente aleatorio ("Pero, ¿qué pasa si las dos computadoras de mano se inician al mismo tiempo? ¡Se podría crear el mismo número!") – RoboJ1M

+0

Como se indica en el artículo, la función no solo usa la marca de tiempo sino también información relacionada con el hardware. Por lo tanto, no debería producir guiones colisionantes cuando dos dispositivos se inician al mismo tiempo, con suerte :) – Matten

Cuestiones relacionadas