static string GetStringHash (KeyedHashAlgorithm kha, string str)
{
if (String.IsNullOrEmpty (str))
return String.Empty;
string result;
try {
_stringHashCacheLock.EnterUpgradeableReadLock ();
if (stringHashCache.TryGetValue (str, out result))
return result;
try {
_stringHashCacheLock.EnterWriteLock ();
if (stringHashCache.TryGetValue (str, out result))
return result;
result = Convert.ToBase64String (kha.ComputeHash (Encoding.UTF8.GetBytes (str)));
stringHashCache.Add (str, result);
} finally {
_stringHashCacheLock.ExitWriteLock ();
}
} finally {
_stringHashCacheLock.ExitUpgradeableReadLock ();
}
return result;
}