1

我正在将一些 Objective-C 移植到 Android。源应用程序将大量数据存储在结构数组中,并具有一些高性能方法来查找数组并计算结果集,以便在用户在图形周围拖动指针时提供近乎实时的点分析他们的手指。计算结果用于更新图形周围各种视图中的值。

这是一个包含大约 7.5k 结构的示例。

structDataFeedReduced gFeedData[7662] = {
1233,@"",12.466667,26.166667,@"AARS",0,0,0,1.000000,-1,1,1,
6760,@"",15.816667,41.033333,@"DCTT",1,1,1,12.000000,-1,1,2,
8117,@"",44.016667,144.283333,@"SKDD",2,1,2,9.000000,-1,1,1,
8666283,@"WS",42.676666,40.006668,@"DLCC",3,2,3,-5.000000,-1,1,6,
...
...
...
};

我的问题是在 Java 中静态存储这些数据的最佳方式是什么?

我尝试了以下性能不够高的方法,无论是在加载时还是在运行时为计算提供数据。

  1. SQL 精简版。
  2. 从存储在资产中的文件中读取。
  3. 静态存储为字符串数组,然后将它们初始化为对象,使用镜像 Objective-C 结构的类(例如从字符串数据转换为 int、bools、doubles 等)
  4. 存储在 arrays.xml 中,然后将它们初始化为对象

还有其他我可以尝试的模式吗?如果没有,那么我会支持上面的 3 或 4,因为我会牺牲一些加载和初始化性能以获得良好的运行时响应。

我的后盾是使用 JNI 将其推送到本机代码中。也许这是唯一有意义的选择?

谢谢...

4

1 回答 1

3

您可以将该数据保留为代码。您可以定义一个StructDataFeedReduced类,然后将初始化代码更改为:

static StructDataFeedReduced[] gFeedData = new StructDataFeedReduced[] {
    new StructDataFeedReduced(1233,"",12.466667,26.166667,"AARS",0,0,0,1.000000,-1,1,1),
    new StructDataFeedReduced(6760,"",15.816667,41.033333,"DCTT",1,1,1,12.000000,-1,1,2),
    ...
}

的构造函数StructDataFeedReduced可以适当地将数据存储在内部字段中。

于 2012-07-29T15:51:23.870 回答