CSharp代码日常优化1
前言
在日常工作看到一部分不太好的代码.顺便优化一下不太好的代码
//看看这一块的代码,都有那些问题?
using (SHA1 sha = SHA1.Create())
{
ASCIIEncoding enc = new ASCIIEncoding(); //这一行代码,有没有问题
byte[] dataToHash = enc.GetBytes(raw);
byte[] dataHashed = sha.ComputeHash(dataToHash); //这一行代码,有没有问题
hash = BitConverter.ToString(dataHashed).Replace("-", "").ToLower(); //这一行代码,有没有问题
}优化代码
static string Sign2(string content)
{
var buf = Encoding.ASCII.GetBytes(content); //1. 减少每次都创建ASCIIEncoding实例
var result = SHA1.HashData(buf); //2. 使用HashData代替ComputeHash
return Convert.ToHexStringLower(result); //3. ToHexStringLower代替BitConverter.ToString和ToLower
}结果测试:
var result = Sign(content);
var result1 = Sign3(content);
Console.WriteLine(result);
Console.WriteLine(result1);
if (result == result1)
{
Console.WriteLine("same result");
}
else
{
Console.WriteLine("different result");
}发现和未优化代码结果一样.
基准测试代码
[Params("qwe", "abc", "helloworld")]
public string Input { get; set; }
[Benchmark(Baseline = true)]
public string Sign()
{
using (SHA1 sha = SHA1.Create())
{
ASCIIEncoding enc = new ASCIIEncoding();
byte[] dataToHash = enc.GetBytes(Input);
byte[] dataHashed = sha.ComputeHash(dataToHash);
return BitConverter.ToString(dataHashed).Replace("-", "").ToLower();
}
}
[Benchmark]
public string Sign2()
{
using SHA1 sha = SHA1.Create();
ASCIIEncoding enc = new ASCIIEncoding();
byte[] dataToHash = enc.GetBytes(Input);
byte[] dataHashed = sha.ComputeHash(dataToHash);
return Convert.ToHexStringLower(dataHashed);
}
[Benchmark]
public string Sign3()
{
var buf = Encoding.ASCII.GetBytes(Input); //1.减少每次都会创建ASCIIEncoding实例
var result = SHA1.HashData(buf); //2.使用HashData代替ComputeHash
return Convert.ToHexStringLower(result); //3. 使用ToHexStringLower代替itConverter.ToString 和ToLower
}看看性能基准测试结果:

秋风
2026-03-18
