我有几个 100k 值的大型 double 和 long 数组,每个数组都需要在给定时间访问以进行计算,即使有 largeHeap 请求,Android OS 也没有给我足够的内存,而且我在大多数测试设备中不断出现内存不足的异常。所以我开始研究克服这个问题的方法,根据我在上一个问题中从 Waldheinz 得到的答案,我实现了一个基于文件的数组,使用 RandomAccessMemory 获取通道,然后按照建议使用 MappedByteBuffer 映射它,并使用 MappedByteBuffer asLongBuffer 或 asDoubleBuffer。这很完美,我 100% 消除了内存不足的异常。但性能很差。我收到很多调用 get(some index) 的调用,每个调用大约需要 5-15 毫秒,因此用户体验被破坏了
一些有用的信息:
- 我在数组上使用二进制搜索来查找开始和结束索引,然后我有一个从开始到结束的线性循环
- 我为任何需要超过 5 毫秒才能完成的 get() 调用添加了一个打印命令(打印出所花费的时间、请求的索引和最后请求的索引),似乎所有的二进制搜索获取请求都已打印,并且很少的线性请求也是。
关于如何让它更快的任何建议?