在 dart 中使用对象作为映射键会对性能产生重大影响吗?

ts.*_*ts. 2 performance benchmarking dictionary dart

在 dart 中编写一些代码时,我最近发现使用某些对象作为映射键更简单的情况。实际上这段代码是在 Web 模式下执行的(编译为 javascript),但最终它也会在 dart VM 模式下使用。

使用对象作为映射的键会对 dart 产生显着的内存/性能影响吗?

我没有找到很多关于基准测试的资源(https://dart.dev/articles/benchmarking已失效),因此也欢迎任何指示。

jul*_*101 7

有一些注意事项:

记忆

由于用作键的每个对象都将由 Map 引用,因此每个对象不能被垃圾回收,除非该对象Map本身可以被垃圾回收或者该键已从 中删除Map。对于每个键的关联值也可以这样说。

String至于映射用于保存键和值的存储,如果您使用例如作为键或自定义对象,那么它应该没有任何区别,因为两种键都将仅保存为引用。

表现

a 上的操作的性能Map很大程度上是关于==运算符和hashCode属性的性能的问题,因为两者都用于 a 上使用的多个操作Map。

我建议您在这里阅读有关它们的内容:

https://api.dart.dev/stable/2.7.2/dart-core/Object/operator_equals.html

https://api.dart.dev/stable/2.7.2/dart-core/Object/hashCode.html

结论

许多项目都使用自定义对象作为地图的键,通常在此期间不会出现问题。事实上,使用自定义对象与使用 aString作为键没有什么不同,因为String它们也只是一个具有自己的==运算符和hashCode属性的普通类。