gpt4 book ai didi

javascript - 我应该在 Dart 映射键中使用 int/enum 或 String 来最大限度地减少内存使用吗?

转载 作者:行者123 更新时间:2023-12-02 15:41:49 25 4
gpt4 key购买 nike

我的网络应用程序使用(并存储)大型 [Dart] map 中的数据。考虑到内存和效率/性能,我应该使用 int 还是 String 作为键,了解 int 始终是 64 位?

举一个非常简单的例子:

 Map one=new Map();
one[1]=somedata;
one[2]=somedata2;
one[3]=somedata3;

Map two=new Map();
two['1']=somedata;
two['2']=somedata2;
two['3']=somedata3;

Map big =new Map();

存储数百个一和二

one['12345678']=x 使用与 one[1]=x 相同的内存量吗?

(如果有 sizeof(one),这将很容易测试!)

我应该被打扰吗?

谢谢

史蒂夫

最佳答案

数字占用的空间更少。 SMI(“小整数”)范围内的数字(在 32 位机器上有符号 31 位,在 64 位机器上有符号 63)仅占用一个字。另一方面,字符串是指向表示字符串的对象的指针。也就是说,您使用的每个字符串都位于堆中的某个位置。如果您只有很少的可能字符串并且重复使用这些字符串,那么字符串的开销并不会那么高。

整数对于哈希码和等式计算也更快。如果它不会降低代码的可读性,那么您应该选择整数。否则,您应该评估性能和内存的改进是否真的值得以失去可读性(或清晰度)为代价。

注意:当编译为 JavaScript 时,事情会变得更加复杂。 Dart 使用 JavaScript 对象作为容器。这意味着字符串非常有效。普通 JavaScript 对象经过优化可用作字符串映射(尽管负查找不是那么快)。它们对于数字的处理也非常高效,但是它们不存储插入顺序。这意味着,链接的 hashmap(默认的 Dart Map)不能仅使用 JavaScript 对象作为数字的容器。如果您想要一个在 JavaScript 中也能工作的高效整数映射(最多 31 位值),您应该使用 dart:collection 中的 HashMap

关于javascript - 我应该在 Dart 映射键中使用 int/enum 或 String 来最大限度地减少内存使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503737/

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