c# - Array.Empty<int>() : Why does Rider show an allocation occurred, 但 BenchmarkDotNet 没有?

标签 c# .net benchmarking allocation

第一张图片中使用的内存工具来自 Rider。据我所知,它显示了对托管堆的分配。第二张图片显示了 BenchmarkDotNet 的结果。

为什么 Rider 显示已进行分配,但 BenchmarkDotNet 却显示未对堆进行分配?

如果我改用下面的代码示例,BenchmarkDotNet 会选择分配:

var i = new int[0];

Rider memory tool results

BenchmarkDotNet results

最佳答案

Array.Empty 指向框架已经静态分配的数组(参见 here )。

当您调用 new int[0] 时,实际上会为您分配一个大小为 0 的新数组。

另见 answer .

关于c# - Array.Empty<int>() : Why does Rider show an allocation occurred, 但 BenchmarkDotNet 没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72088530/

相关文章:

c# - .NET Core 3.0 迁移错误 IAsyncEnumerable<T> 存在于 System.Interactive.Async 和 System.Runtime 中

c# - 启用 scrollviewer 滚动每个项目而不是默认行为

c# - 在 C# 中打开具有完全访问权限的 Excel 工作表

hadoop - 如何从 hadoop 集群上的 TestDFSIO 基准计算吞吐量

json - 基准 : BSON vs JSON

c++ - boost::thread_sleep 与 boost::chrono::thread_clock 不一致

c# - 匹配任何有效正则表达式的正则表达式

c# - 自动生成的数据网格中的日期时间转换器

c# - 调整图像大小以适合打印页面的问题

c# - 即使在需要时也不会发生垃圾收集