Voglio hash una stringa di lunghezza fino a 30. Quale sarà l'idea migliore per farlo se il tempo è la mia preoccupazione. La funzione verrà chiamata oltre 100 milioni di volte. Attualmente sto usando il seguente codice,Una funzione di hash veloce per la stringa in C#
static UInt64 CalculateHash(string read, bool lowTolerance)
{
UInt64 hashedValue = 0;
int i = 0;
while (i < read.Length)
{
hashedValue += read.ElementAt(i) * (UInt64)Math.Pow(31, i);
if (lowTolerance) i += 2;
else i++;
}
return hashedValue;
}
C'è un motivo per cui il metodo 'Object.GetHashCode()' non funzionerà per te? Sembra che tu stia praticamente reimplementando lo stesso concetto. –
Tutto ciò che non usa * la matematica in virgola mobile * sarà più veloce. –
GetHashCode non è persistibile, quindi se ha bisogno di memorizzare il codice hash in un database, non è utile. Quindi di nuovo, nemmeno questo è. Qual è il tuo utilizzo? Hai solo bisogno di hash la stringa in fase di esecuzione, o cosa devi fare con l'hash? Adler-32 potrebbe essere un'opzione se è necessario memorizzarlo e non incorrere in troppe collisioni. –