0

我想知道如何在java中优化以下内容。我希望在 Android 手机上使用它,这样内存中的内容越少越好。

我得到一个包含一列的记录集,该列将二进制数据保存在一个字节数组中。这是我从来没有玩过的东西。

二进制数据中的信息结构可以在这里找到:BLOB

我想跳过 SRID 和 MBR,但我想要 ENDIAN、CLASS TYPE 和实际的几何数据。

几何数据的实际处理在这个问题中并不那么重要,更重要的是我如何获取数据以及如何快速获取数据。

Stmt stmt = local_db.prepare("Select geometry From Parcel");
while (stmt.step()){
    //stmt.column_bytes(0) holds the byte array
    //this could be used with a ByteArrayInputStream or perhaps a ByteBuffer
    //maybe something else, what ever would be faster??
    //
    //Next would be the proccessing of the byte array to get the values out.
    //Switch (ENDIAN){
    //  case 0 :
    //    
    //  break;
    //  default:
    //     
    //}
}
stmt.close();

最后,这些形状将直接放入渲染器,因此我不需要在内存中保留任何内容。这超出了我自己,但可能对你有用,看看我最终将如何使用它。

4

1 回答 1

0

我认为不可能预测“最快的方式”会是什么。但是,这可能不应该是您成功的主要标准。

您真正需要的是一个运行速度足够快的应用程序。在这种情况下,应用程序性能包括执行数据库查询以及将结果提取到 Java 堆中所花费的时间。(或从文件中读取...)

所以我推荐以下方法:

  1. 简单写一下。
  2. 编写单元测试。
  3. 使用单元测试对其进行彻底测试并纠正任何错误。
  4. 创建一个基准/示例数据,您可以使用它来衡量代码当前的速度。
  5. 在代码上运行基准测试。
  6. 速度够快吗?如果是,则停止。
  7. 分析代码以确定瓶颈在哪里:
    • 如果瓶颈在数据库中,请努力优化数据库架构和查询......
    • 如果瓶颈出现在 Java 端,请努力优化它。
  8. 转到第 3 步……看看您的“优化”是否有帮助。

一般来说,只值得优化代码/实现中的瓶颈区域。虽然有例外(即真正有天赋的程序员),但大多数开发人员对真正的瓶颈在哪里并没有特别准确的直觉。如果你不知道某个特定的代码区域是一个瓶颈,那么花在优化上的努力就有可能浪费时间

于 2013-06-25T07:55:50.067 回答