В области разработки программного обеспечения тестирование производительности является важной частью обеспечения эффективной и стабильной работы программных систем. Это помогает вам оценить производительность вашего приложения и понять его время отклика, пропускную способность, использование ресурсов и т. д. в различных условиях. Бенчмаркинг позволяет определить, как ваша система работает при обработке конкретных рабочих нагрузок.
BenchmarkDotNet — это комплексная и простая в использовании платформа для тестирования производительности с открытым исходным кодом, основанная на .NET. Она предоставляет разработчикам .NET мощные возможности оценки и оптимизации производительности. Благодаря таким функциям, как автоматическое тестирование, поддержка нескольких платформ, расширенный статистический анализ и пользовательские конфигурации, BenchmarkDotNet помогает разработчикам лучше понимать и оптимизировать производительность программных систем.
Создайте файл с именем:BenchmarkDotNetExercise
из.NET 9 консольных приложений.
существоватьNuGetСумка Искать в менеджере:BenchmarkDotNet
Пакет для установки:
следующий мыверно.NETсерединаобщийиз Три криптографические хэш-функции:MD5
、SHA256
、SHA1
Проведите тесты производительности, давайте проанализируем, производительность какого хэш-алгоритма лучше и быстрее.
[MemoryDiagnoser]//Распределение памяти памяти
public class HashFunctionsBenchmark
{
private readonly string _inputData;
public HashFunctionsBenchmark()
{
// использовать более длинную строку в качестве входных данных, чтобы лучше отражать производительность.
_inputData = new string('y', 1000000);
}
[Benchmark]
public byte[] MD5Hash()
{
using (MD5 md5 = MD5.Create())
{
return md5.ComputeHash(Encoding.UTF8.GetBytes(_inputData));
}
}
[Benchmark]
public byte[] SHA256Hash()
{
using (SHA256 sha256 = SHA256.Create())
{
return sha256.ComputeHash(Encoding.UTF8.GetBytes(_inputData));
}
}
[Benchmark]
public byte[] SHA1Hash()
{
using (SHA1 sha1 = SHA1.Create())
{
return sha1.ComputeHash(Encoding.UTF8.GetBytes(_inputData));
}
}
}
internal class Program
{
static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<HashFunctionsBenchmark>();
}
}
Обратите внимание, что он должен быть установлен на:Release
режим запуска,еслиDebug
Режим выдаст следующее исключение:
// Validating benchmarks:
// * Assembly BenchmarkDotNetExercise which defines benchmarks is non-optimized
Benchmark was built without optimization enabled (most probably a DEBUG configuration). Please, build it in RELEASE.
If you want to debug the benchmarks, please see https://benchmarkdotnet.org/articles/guides/troubleshooting.html#debugging-benchmarks.
Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
---|---|---|---|---|---|---|---|
MD5Hash | 1.952 ms | 0.0169 ms | 0.0158 ms | 197.2656 | 197.2656 | 197.2656 | 976.9 KB |
SHA256Hash | 3.907 ms | 0.0157 ms | 0.0147 ms | 195.3125 | 195.3125 | 195.3125 | 976.93 KB |
SHA1Hash | 1.780 ms | 0.0231 ms | 0.0193 ms | 197.2656 | 197.2656 | 197.2656 | 976.92 KB |
[MarkdownExporter, AsciiDocExporter, HtmlExporter, CsvExporter, RPlotExporter]
public class HashFunctionsBenchmark
{
}
Чтобы узнать больше о практических функциях и особенностях проекта, посетите адрес проекта с открытым исходным кодом👀 и не забудьте дать проекту звездную поддержку💖.
Этот проект включен в C#/.NET/.NET. CoreВыбор выдающихся проектов и фреймворковсередина,сосредоточиться на Выбор выдающихся проектов и Фрейворков позволяет быть в курсе C#, .NETи.NET Новейшие разработки и лучшие практики в области Core для повышения эффективности и качества опытно-конструкторских работ. Яма вырыта, присылайте пиар-рекомендации или саморекомендации (чтобы отличные проекты и фреймворки не были похоронены🤞).