“使异步 ValueTask/ValueTask 方法无需摊销分配”发生了什么?

问题描述 投票:0回答:1

Steven Toub 向 .NET 5 引入了〜无分配

ValueTask<T>
。来自他的深刻教育传奇.NET 5 中的性能改进

Method           Runtime        Mean       Ratio    Allocated
ValueTaskCost   .NET FW 4.8     1,635.6 us  1.00    294010 B
ValueTaskCost   .NET Core 3.1   842.7 us    0.51    120184 B
ValueTaskCost   .NET 5.0        812.3 us    0.50    186 B     <--- !

我第一次看到这个是在 Dapper 英雄 Marc Gravell here 的一篇文章中,他建议总是使用

ValueTask
而不是
Task
(尽管有趣的是 Dapper 并没有这样做)。

可以通过环境变量

DOTNET_SYSTEM_THREADING_POOLASYNCVALUETASKS
启用该功能,但如今 .NET 中似乎不再存在该变量。

发生什么事了?是否有技术原因将其删除或默认?

.net memory-management async-await
1个回答
0
投票

[此处](https://github.com/dotnet/runtime/pull/50116)实验性功能被替换为自定义构建器实现,该实现通过添加属性在逐个方法的基础上使用:

[AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))]

(或非通用等效项)

© www.soinside.com 2019 - 2024. All rights reserved.