Optimize the performance of the Hash algorithm and reduce allocations. (#690)
diff --git a/csharp/rocketmq-client-csharp/Utilities.cs b/csharp/rocketmq-client-csharp/Utilities.cs
index 331d8a4..831ab83 100644
--- a/csharp/rocketmq-client-csharp/Utilities.cs
+++ b/csharp/rocketmq-client-csharp/Utilities.cs
@@ -34,6 +34,8 @@
private static readonly string HostName = System.Net.Dns.GetHostName();
private static readonly byte[] RandomMacAddressBytes =
Enumerable.Range(0, 6).Select(_ => (byte)new Random().Next(256)).ToArray();
+ private static readonly ThreadLocal<MD5> Md5 = new ThreadLocal<MD5>(MD5.Create);
+ private static readonly ThreadLocal<SHA1> Sha1 = new ThreadLocal<SHA1>(SHA1.Create);
public const int MasterBrokerId = 0;
@@ -80,24 +82,31 @@
return $"{hostName}@{pid}@{index}@{no}";
}
+#if NET5_0_OR_GREATER
public static string ComputeMd5Hash(byte[] data)
{
- using (var md5 = MD5.Create())
- {
- var hashBytes = md5.ComputeHash(data);
- return BitConverter.ToString(hashBytes).Replace("-", "");
- }
+ var hashBytes = Md5.Value.ComputeHash(data);
+ return Convert.ToHexString(hashBytes);
}
public static string ComputeSha1Hash(byte[] data)
{
- using (var sha1 = SHA1.Create())
- {
- var hashBytes = sha1.ComputeHash(data);
- return BitConverter.ToString(hashBytes).Replace("-", "");
- }
+ var hashBytes = Sha1.Value.ComputeHash(data);
+ return Convert.ToHexString(hashBytes);
+ }
+#else
+ public static string ComputeMd5Hash(byte[] data)
+ {
+ var hashBytes = Md5.Value.ComputeHash(data);
+ return BitConverter.ToString(hashBytes).Replace("-", "");
}
+ public static string ComputeSha1Hash(byte[] data)
+ {
+ var hashBytes = Sha1.Value.ComputeHash(data);
+ return BitConverter.ToString(hashBytes).Replace("-", "");
+ }
+#endif
private static string DecimalToBase36(long decimalNumber)
{