我是ORMLite的主要作者,它在类上使用Java注释来构建数据库模式.我们的软件包的一个重大启动性能问题原来是在Android 1.6下调用注释方法.我看到3.0的相同行为.
我们看到以下简单的注释代码是令人难以置信的 GC密集型和真正的性能问题.在快速的Android设备上,1000次调用注释方法需要几乎一秒钟.在我的Macbook Pro上运行的相同代码可以同时执行2800万(sic)调用.我们有一个注释,里面有25个方法,我们希望每秒做50多个.
有谁知道为什么会这样,如果有任何解决方法?当然,ORMLite可以在缓存这些信息方面做些什么,但我们可以做些什么来"修复"Android下的注释?谢谢.
public void testAndroidAnnotations() throws Exception {
Field field = Foo.class.getDeclaredField("field");
MyAnnotation myAnnotation = field.getAnnotation(MyAnnotation.class);
long before = System.currentTimeMillis();
for (int i = 0; i < 1000; i++)
myAnnotation.foo();
Log.i("test", "in " + (System.currentTimeMillis() - before) + "ms");
}
@Target(FIELD) @Retention(RUNTIME)
private static @interface MyAnnotation {
String foo();
}
private static class Foo {
@MyAnnotation(foo = "bar")
String field;
}
Run Code Online (Sandbox Code Playgroud)
这导致以下日志输出:
I/TestRunner( 895): started: testAndroidAnnotations
D/dalvikvm( 895): GC freed 6567 objects / …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Android应用程序,并尝试使用ORMLite,但性能似乎非常差.还有其他人经历过这个吗?
或者我做错了什么?
编辑
不,我没有进行任何连接,并且所有查询都是使用索引键作为参数进行的.但是数据集非常大,而且有很多比较.
没试过用纯SQLite ...