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
}

看看性能基准测试结果:

代码日常优化1

秋风 2026-03-18