问题标签 [benchmarkdotnet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
684 浏览

c# - 在发布模式下关闭调试器

我已将 Build 设置为 Release 模式。

在此处输入图像描述

我正在运行我的.NET Core 3.1控制台应用程序Benchmark DotNet。但它告诉我,

摘要 -> 使用附加的调试器执行基准测试

Release如何在构建模式下完全关闭调试器?

0 投票
3 回答
207 浏览

c# - 为什么分配的内存比预期的多?

我正在使用 BenchmarkDotNet 及其 MemoryDiagnoser 功能。

考虑以下基准:

我希望它恰好分配 1 个字节。

但基准测试结果显示总共分配了 32 个字节。怎么来的?我觉得这很误导人。

0 投票
1 回答
3031 浏览

c# - 在 XUnit 中运行 BenchmarkDotNet

我在我的项目(web api,VS2019)和 XUnit 2.4.1 中使用 .NET Core 3.1。最近我在考虑添加一些性能测试,结果发现了这个库 - BenchmarkDotNet。由于我已经将 XUnit 用于其他测试,因此我想从 XUnit [Fact]s中运行BenchmarkDotNet

我发现这篇文章解释了必须为 xunit 关闭程序集的影子副本。所以我尝试了以下操作:

  1. 为了简单起见,我创建了全新的.net core 3.1控制台应用程序项目,其中包含我想要进行基准测试的示例方法:

然后在Program.cs我有:

Release中编译和运行应用程序时,我验证了带有日志和基准输出文件的BenchmarkDotNet.Artifacts文件夹已正确创建。

  1. 我已将 XUnit 项目添加到解决方案中并创建了简单的[Fact]方法:

同样在发布配置中构建并从测试资源管理器运行此方法将在bin/Release/dotnetcoreapp3.1/中创建BenchmarkDotNet.Artifacts文件夹,但日志文件为空。

  1. 我还尝试将具有以下内容的xunit.runner.json文件添加到我的 XUnit 项目的根目录中:

但似乎对行为没有影响 - 我验证了文件xunit.runner.json已复制到输出 bin 目录(属性->复制到输出目录->始终复制)。

  1. 我还安装了xUnit.net Console Runner v2.4.1并尝试从控制台运行测试:

再次没有运气。我在这个github 链接上找到的选项-noshadow。似乎该选项在旧版本中可用,但未列出我的xunit 控制台运行程序 v2.4.1的帮助输出,但我试了一下。

所以我的问题是是否有可能让 DotNetBenchmarkTest 与 XUnit 一起工作,如果可以,你能指出我做错了什么吗?

0 投票
1 回答
99 浏览

c# - 基准点网。是否可以包括未预热的结果?

假设我们有一些在冷启动时非常慢的大方法。我们可以做这样的基准测试并看到未预热的结果吗?

0 投票
4 回答
591 浏览

c# - C# 尽可能高效地从字符串中删除回车符、换行符和空格(基准)

在 C# 中,我有一个包含空格、回车和/或换行符的字符串。有没有一种简单的方法来规范从文本文件导入的大字符串(100.000 到 1.000.000 个字符),尽可能高效

澄清我的意思:假设我的字符串看起来像 string1 但我希望它像 string2

0 投票
1 回答
72 浏览

c# - 使用 MemoryStream 和 CryptoStream 时清除 Gen2 和 LOH 中的堆

我正在尝试进行一些测量以了解如果添加“加密/解密过程”会占用多少空间\。此外,我正在比较不同的方法,例如使用FileStream或返回MemoryStream(在某些情况下我需要)。

看起来大文件保存在内存中(Gen2 和 LOH)。我怎样才能完全清除堆(我想在 FileStream Approach 中看到相同的 Gen2 结果)?

我正在使用using关键字。但看起来没有希望了!我还减少了默认缓冲区大小,如下面的代码所示。但是我在 Gen2 中仍然有数字

文件流结果

内存流结果

文件解密方法

内存解密方法

顺便说一句,我还添加了这些行:

仍然有这些结果

我错过了什么?!:(

0 投票
1 回答
103 浏览

c# - 使用 BenchmarkDotnet 摆脱默认导出器

根据文档BenchmarkDotnet 的默认导出器是:csv、html 和 markdown。

我可以看到如何添加我自己的导出器,但我可以看到如何摆脱默认导出器。

如果没有办法做到这一点,出口商的运行顺序是否得到保证?换句话说,我的附加导出器是否可以保证在默认导出器之后运行?

0 投票
1 回答
379 浏览

c# - BenchmarkDotNet 在遇到奇怪的解决方案结构时无法找到测试

我遇到了难以解决的 BenchmarkDotNet 问题

这是我的项目结构:

TestsBenchmark引用Tests并且只有这行代码:

但是当我通过dotnet run -c Release它运行它时

// Generate Exception: Unable to find Tests in ...\Infrastructure and its subfolders. Most probably the name of output exe is different than the name of the .(c/f)sproj

以前我的项目结构是这样的:

一切正常

复制步骤(手动),它重新创建文件夹结构、项目、项目关系、解决方案并添加 nuget。在一些空文件夹中的例如powershell中运行它:

单元测试1.cs

程序.cs

现在在里面Infrastructure\TestsBenchmark

履行dotnet run -c Release

你会看到

0 投票
1 回答
19 浏览

c# - NSubstitute 在基准测试中分配内存

NSubstitute用来模拟我的数据库调用以进行基准测试。对于我正在使用的基准测试BenchmarkDotNet。尽管在我的替代方法中没有分配内存,但我正在分配内存。我需要知道是什么导致了这种内存分配以及根据什么字节数计算出来的。

在我的 TeamManager 中:

这是我的基准测试结果:

你能告诉我为什么虽然我替换了该方法,但仍然分配了内存以及为什么它是如何计算的?

0 投票
0 回答
103 浏览

c# - BenchmarkDotNet 返回值分配内存

我正在使用BenchmarkDotNet.netcore 3.1 对我的代码进行基准测试。即使没有进行分配,当我获得内存分配结果时也会遇到某个问题。这是我正在做的事情的快照:

Person 是一个简单的类:

ReturnFirstPerson方法不计算或分配任何内存,只返回数组中的第一个值,这些是基准测试结果:

你能解释一下为什么结果显示内存分配吗?