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

为什么Rider显示已经进行了分配,而BenchmarkDotNet表明没有对堆进行分配?

如果我改用下面的代码示例,BenchmarkDotNet将获得分配:

var i = new int[0];

Rider memory tool results

BenchmarkDotNet results

推荐答案

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

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

另见本answer.

Csharp相关问答推荐

如何基于记录数组,在一次拍摄中更新单个MongoDB集合的多个记录中的子嵌入文档?

如何从Date中剥离Timezone部分以仅保留本地Date部分?(no字符串解析或操作)

获取Windows和Linux上的下载文件夹

下拉图片点击MudBlazor

将列表字符串映射为逗号分隔字符串<>

如何在C#中删除一个特殊字符,如"使用Regex"

如何修改中间件或其注册以正确使用作用域服务?

为什么总输出就像12.3没有一分一样?

Amazon SP-API确认发货不设置&Quot;递送服务

如何使用XmlSerializer序列化带有CDATA节的XML文件?

net中从位图获取坐标和绘制折线

Swagger没有显示int?可以为空

DateTime ToString()未以指定格式打印

从Base64转换为不同的字符串返回相同的结果

C#命名管道-编码错误?

C#使用相同内存的多个数组

为什么在使用JsonDerivedType序列化泛型时缺少$type?

如何在ASP.NET Core 8中获取键控服务词典

在C#中通过Matheval使用自定义公式

.NET8支持Vector512,但为什么向量不能达到512位?