gpt4 book ai didi

javascript - 存储整数列表的内存有效方式

转载 作者:可可西里 更新时间:2023-11-01 02:09:56 26 4
gpt4 key购买 nike

我正在做一些 javascript 3D 处理,我有大量的对象(比如对象 A),每个对象都包含一些东西和一组正整数,例如 [0, 1, 4],[ 1, 5, 74, 1013] 等。它们不需要有私有(private)值,所有对象都可以共享同一个列表。这些数字可以从 0 到几千,比如 65k(短)。

分析显示这些数组占用了大量内存。在计算时,我的程序达到了超过 2GB 的分配内存,这不是愚蠢的预优化。

我有 2 个内存优化线索:

  1. 找到一种更节省内存的方式来存储这些列表(也许是大数位数组?)
  2. 想办法避免重复。例如,我碰巧发现一些数组(如 [0,1,2,3,4,5,6])存在于超过 40 000 个对象 A 中。也许将这些数组存储在树结构中并制作我的对象指出一点会有帮助吗?

你有什么建议吗?

编辑:我忘了提到它,但它很重要:列表中的每个整数都是唯一的。EDIT2:唯一重要的是检索整数 SET,顺序并不重要。

我正在考虑通过按位运算将这些数组转换为“大整数”,即创建一个具有某个类的大整数,设置位 1、5、74、1013,然后将大整数转换为字符串(数组8 字节)并存储字符串,但这并不总是有好处(例如,数组 [4000] 将表示为 500 字节长的字符串...)

项目范围(无用,但有人要求我提供)

这对回答问题来说应该是无用的,但我已经被问过好几次了,我把它放在这里。

我正在构建体积对象的 3D 网格,为简化起见,我们假设我有很多球体。我知道它们的位置(中心、射线)并且我想在单个 3D 网格中绘制它们。为此,我有一个名为 Octree 的内存结构。这允许我在我的对象表面周围的较低单元格(八叉树节点)中划分 3D 空间。然后我可以从这些单元格构建一个网格。

这些单元格就是我在描述中所说的对象 A。每个单元格都包含一个 ids(正整数)列表,它指向单元格相交的 Sphere 对象。

事实是,分析显示这些单元阵列在内存中保留了数百 MB。我想减少这个数字,方法是找到一种方法来删除所有重复项和/或如果可能的话,找到一种更有效的方法来存储正 id 列表(可以从 0 到 65k)。

最佳答案

查看此页面 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays?redirectlocale=en-US&redirectslug=JavaScript%2FTyped_arrays ,我包含低级 javascript 容器,我认为其中之一可以满足您的需求

关于javascript - 存储整数列表的内存有效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050848/

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