我应该在我的Dart地图键中使用int/enum或String来最小化内存使用吗?
should I use an int/enum or String in my Dart map keys to minimise memory usage?
我的web应用程序在一个大的[Dart]地图中使用(并存储)数据。考虑到内存和效率/性能,我应该使用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();
与大存储数百 1和2 。
一个['12345678']=x是否与一个[1]=x使用相同的内存量?
(如果存在sizeof(1),这将很容易测试!)
我应该被打扰吗?
感谢史蒂夫数字占用的空间更小。SMI("小整数")范围内的数字(在32位机器上为31位,在64位机器上为63位)只占用一个单词。另一方面,字符串是指向表示字符串的对象的指针。也就是说,你使用的每个字符串都存在于堆的某个地方。如果您只有几个可能的字符串,并且重用这些字符串,那么字符串的开销就不会那么高。
整数对于哈希码和等式计算也更快。如果它不会降低代码的可读性,那么应该使用整数。否则,您应该评估性能和内存的改进是否真的值得牺牲可读性(或清晰度)。
注意:当编译成JavaScript时,事情变得更加复杂。Dart使用JavaScript对象作为容器。这意味着字符串是非常有效的。普通JavaScript对象经过优化,可以用作String映射(尽管负查找没有那么快)。它们处理数字的效率也很高,但是它们不存储插入顺序。这意味着,链接的hashmap(默认的Dart Map)不能仅仅使用JavaScript对象作为数字的容器。如果你想有一个有效的整数映射,也可以在JavaScript中工作(最多31位的值),你应该使用dart:collection
中的HashMap
。
我猜一个['12345678']=x使用与一个[1]=x相同的内存量。因为像Java一样,Dart只在内存中保存字符串一次,所以字符串永远不会重复。所以我想你不需要为键操心了
- 最小化时暂停Javascript动画
- 全局窗口热键在最小化chrome窗口时调用js函数
- Grunt-将多个文件最小化/处理为一个文件
- Bootstrap一页导航Fluid网站最小化问题
- 最小化js时出现Gulp错误
- 最小化CSS/JS文件,并使用命令行创建一个文件
- 在Dojo构建期间,在最小化期间关闭文件编译
- Angular 2捆绑和最小化
- 剑道窗口还原在最小化然后还原时不调用调整大小事件
- 最小化在javascript中客户端/服务器之间发送的数据
- 咕噜咕噜 - 最小化指令
- 如何在追加函数创建后最小化单个框
- 如何禁用最大化,最小化和关闭按钮以打开新窗口
- 如何使用jquery裁剪插件最小化请求的图像
- 最小化Javascript和HTML代码
- 客户端HTML最小化
- 如何避免/最小化列表中列表的缩进
- 最小化httpInterceptor AngularJS$注入器错误
- 使用Sencha CMD最小化现有的ExtJS应用程序
- 我应该在我的Dart地图键中使用int/enum或String来最小化内存使用吗?