2010-12-17 5 views
5

私のコードがx64プロセスでホストされていたときに発生したバグによって、今週はうんざりでした。私は検索のためにハッシュ値を使用しており、データベースにそのハッシュ値を格納しています。過去に生成されたハッシュ値はx86ハッシュで、x64ハッシュが生成されているので、参照値がこれ以上一致しないためにエラーが発生しています。x64モードで実行しているときにx86ハッシュ値を生成できますか?

私はこれに非常に懐疑的ですが、私はとにかく尋ねると思いました。コードがx64プロセスで実行されている場合、x86ハッシュ値を生成する方法はありますか?

参考までに、私はC#で.NET 4.0を実行しています。

編集:

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

実行アプリ:あなたは次のコードでコンソールアプリケーションを作成することで問題を再現することができますString.GetHashCode() returns different values

ここで私はに実行してきた問題ですx86プラットフォームで実行し、x64プラットフォームで実行します。

プラットフォーム間で一貫した値を取得したいだけです。しかし、私はちょうど事前にコンパイルされたハッシュリストを作成して、必要なイベントでフェイルオーバーすることができます。 GetHashCode()から一貫した値を取得する方法があるかどうかを知りたかっただけです。私はそうは思わないが、可能ならば私の場合には最も簡単な解決策になるだろう。

+3

x86およびx64ハッシュとは何ですか?ハッシュは、一般に、プラットフォームおよびプロセッサに関係なくアルゴリズムによって生成される。 – Joe

+0

どのようにハッシュを生成していますか?コードを見ることはできますか? – kemiller2002

+0

システム間で一貫した値が必要な理由をお知らせください。 – PeteT

答えて

6

.NETでデフォルトの実装を使用している場合は恐れ入りますが、これは不可能です。 .NETの異なるバージョン間で同じIDを返すことさえ保証されていません。明示的にそれを一意の識別子として使用してはならないと明示します。 Have a read of this on MSDN

+0

私は、バイナリシリアル化では、誰もが読んでいる.NET版の間で同じであることが保証されていないとも言えます。 – PeteT

+0

ありがとう、私はただ確認したかった。私はGetHashCode()メソッドを使用してシリアライズされた型と互換性があるこれを行う方法を考え出しました。私はタイプの "Id"を指定してすべてのタイプに割り当てることができるアトリビュートを作成します。属性にはオプションの "LegacyId"があり、これを使用して古いメソッドを使用してシリアライズされた型を検索できます。このようにして、すべての型に対して一貫した値を持つことができます。 –

関連する問題