首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只读结构作为返回参数

只读结构作为返回参数
EN

Stack Overflow用户
提问于 2020-09-14 07:21:31
回答 1查看 214关注 0票数 3

我正在考虑实现一个异步函数返回一个结果结构,结果本身应该是不可变的,并且我正在考虑返回一个只读结构而不是类。

查看一些最新的Microsoft源代码,我可以看到只读结构被广泛使用,所以我的问题是这是否是正确的方法。从众多的文章来看,这是不清楚的,很多人指出,结构应该只用于小的大小值?因为结构将是只读的,据我所知,不会有复制?我的返回结构将有2-5 int值和对ReadOnlyMemory缓冲区的引用。

其目的当然是拥有最有效的低内存占用代码。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-14 07:53:02

当然,这是完全正确的。您似乎知道,struct部件有助于避免某些分配,而readonly部件避免了与可变值类型通常相关联的所有痛苦。作为回报,我甚至不会犹豫--没关系。作为“同步”方法的输入,您可能需要考虑添加in修饰符,这样就不会不必要地在堆栈上复制大型值类型(否则会使值类型比引用类型更昂贵)。但是,在您的具体情况下,“异步”通常会成为in使用的障碍(不能将inasync结合使用)。为了真正理解使用struct是否使其更快,您需要对特定场景进行基准测试,因为细节非常重要。

您还可能需要了解async代码中的分配方案。例如,您可能想要考虑ValueTask<T>结果(而不是Task<T>结果),如果结果通常是同步的(有时甚至是异步的),那么对其进行优化以避免状态机--状态机可以由这种方法总结。根据场景的不同,您还可能希望使用像PooledAwait这样的工具(这在NuGet上是可用的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63879754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档