2010-12-17 12 views
5

Me faltó esta semana un error que ocurrió cuando mi código se alojó en un proceso x64. Estoy usando un valor hash para la búsqueda y estoy almacenando ese valor hash en una base de datos. El valor hash que se ha generado en el pasado era un hash x86 y ahora que se están generando hashes x64, recibo errores porque los valores de búsqueda ya no coinciden.¿Se puede generar un valor hash x86 cuando se ejecuta en modo x64?

Soy muy escéptico de esto, pero pensé en preguntar de todos modos. ¿Hay alguna manera de generar un valor hash x86 si mi código se ejecuta en un proceso x64?

Como referencia, me estoy ejecutando en .NET 4.0 utilizando C#.

Editar:

Aquí está el problema que he estado corriendo en: String.GetHashCode() returns different values

Puede duplicar el problema mediante la creación de una aplicación de consola con el siguiente código:

"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() 

Ejecutar la aplicación con la plataforma x86, luego ejecútalo con la plataforma x64.

Solo quiero obtener valores consistentes en todas las plataformas. Sin embargo, puedo crear una lista precompilada de hashes para que pueda fallar en el caso de que lo necesite. Solo quería saber si había una forma de obtener valores consistentes de GetHashCode(). No lo creo, pero si es posible, sería la solución más fácil en mi caso.

+3

¿Qué son los hashes x86 y x64? Los hash generalmente se crean a través de un algoritmo que es independiente de la plataforma y el procesador. – Joe

+0

¿Cómo está generando el hash? ¿Podemos ver el código? – kemiller2002

+0

¿Podría decirnos por qué necesita valores uniformes en todos los sistemas? – PeteT

Respuesta

6

Me temo que si está utilizando la implementación predeterminada en .NET, entonces esto no es posible. Ni siquiera garantizan que devolverá la misma identificación entre las diferentes versiones de .NET; y declarar explícitamente que no se debe usar como un identificador único. Have a read of this on MSDN

+0

Creo que esto es correcto Creo que la serialización binaria también dice que no se garantiza que sea el mismo entre las versiones .NET solo para cualquiera que lo lea. – PeteT

+0

Gracias, solo quería confirmación. He descubierto una forma de hacer esto que será compatible con los tipos que fueron serializados usando el método GetHashCode(). Voy a crear un atributo donde pueda especificar el "Id" de un tipo y asignarlo a todos los tipos. El atributo tendrá un "LegacyId" opcional que puedo usar para buscar tipos que fueron serializados usando el método anterior. De esta forma puedo tener valores consistentes para todos los tipos. –

Cuestiones relacionadas