gpt4 book ai didi

c# - 值元组与匿名类型的性能

转载 作者:太空狗 更新时间:2023-10-29 19:52:19 27 4
gpt4 key购买 nike

令我惊讶的是,目前还没有关于此的问题。 C# 7 附加值元组。我在想什么时候应该采用这些功能。

以本词典为例,使用匿名类型:

var changesTypeMapByEntityState = this.ChangeTracker.Entries()
.Where(x => (int)x.State > (int)EntityState.Unchanged)
.GroupBy(x => new { Type = x.Entity.GetType(), x.State })
.ToDictionary(x => x.Key, x => x.ToList());

与使用值元组的字典相比

var changesTypeMapByEntityState = this.ChangeTracker.Entries()
.Where(x => (int)x.State > (int)EntityState.Unchanged)
.GroupBy(x => (Type: x.Entity.GetType(), x.State ))
.ToDictionary(x => x.Key, x => x.ToList());

其中哪一个性能更好,使用新语法与旧语法相比有哪些好处?

最佳答案

在这种情况下,没有太大区别。

但在其他情况下,值元组可以具有显着的性能优势。因为它们是值类型而不是引用类型,细心的程序员有时可以使用它们来避免在堆上分配新的内存,这些内存也必须被管理和收集。此外,值元组更容易在本地范围之外共享,因此在匿名类型不合法的许多情况下都是合法的。

也就是说,值类型和引用类型也可以有不同的语义,这意味着您可能会遇到对匿名类型的引用更合适的情况,尤其是当您大量复制引用时。

最后,GC 内存管理作为程序的主要性能驱动因素并不常见。值元组的性能优势不太可能产生足够大的差异以匆忙更改所有旧代码,除非您有无限的时间花在分析器工具上以确保它是一个胜利。更值得留意哪种选择会产生更清晰的代码或使用更好的语义。

关于c# - 值元组与匿名类型的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48118187/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com