Javascript 我应该在Dart映射键中使用int/enum或String来最小化内存使用吗?

Javascript 我应该在Dart映射键中使用int/enum或String来最小化内存使用吗?,javascript,dart,Javascript,Dart,我的web应用程序使用(并存储)大型[省道]地图中的数据。考虑到内存和效率/性能,我应该使用int还是字符串作为键,因为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 bi

我的web应用程序使用(并存储)大型[省道]地图中的数据。考虑到内存和效率/性能,我应该使用int还是字符串作为键,因为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();
大容量存储了数百个1和2

一个['12345678']=x使用的内存量是否与一个[1]=x使用的内存量相同

(如果有一个(1)的大小,这将很容易测试!)

我应该被打扰吗

谢谢


史蒂夫

我猜一个['12345678']=x使用的内存量与一个[1]=x使用的内存量相同。因为类似Dart的Java只在内存中保存字符串一次,所以字符串永远不会重复。因此,我想您不应该在这里为键而烦恼。

我想一个['12345678']=x使用的内存量与一个[1]=x使用的内存量相同。因为类似Dart的Java只在内存中保存字符串一次,所以字符串永远不会重复。因此,我想您不应该在这里为键而烦恼。

我想一个['12345678']=x使用的内存量与一个[1]=x使用的内存量相同。因为类似Dart的Java只在内存中保存字符串一次,所以字符串永远不会重复。因此,我想您不应该在这里为键而烦恼。

我想一个['12345678']=x使用的内存量与一个[1]=x使用的内存量相同。因为类似Dart的Java只在内存中保存字符串一次,所以字符串永远不会重复。所以我想你不应该在这里为钥匙操心。

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

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

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

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

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

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

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

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

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

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

整数也是fas