GreenDao、Ormlite、Realm性能对比

本文对比分析了GreenDao、Ormlite和Realm在Android开发中的性能,包括增、删、改、查四个方面的运行速度。作者通过实测,展示了每个框架的操作流程和性能数据,以供开发者参考选择。
摘要由CSDN通过智能技术生成

GreenDao、Ormlite、Realm性能对比

       该博文为我本人亲测,代码编写过程中使用到了百度上很多大神的demo,如http://blog.csdn.net/shareye1992/article/details/50789216,http://blog.csdn.net/hedong_77/article/details/53167774,http://blog.csdn.net/wds1181977/article/details/51584052等博文。自己学习的同时也希望大家一起成长,第一次写自己的,博客希望大家能够谅解

       当前android开发中常用的数据库框架有GreenDao、Ormlite、Realm等,这里本人仅就自己的对这三种数据库框架增、删、改、查四个方面运行速度上的性能进行对比,并附上相关代码。下面就这三个框架逐个分析。

一、  GreenDao

1.在 ANDROID 工程中配置「GREENDAO GENERATOR」模块

GreenDAO是一个将对象映射到 SQLite 数据库中的轻量且快速ORM 解决方案。这里我所进行测试的GreenDao版本为greendao:1.3.7。详细测试demo流程如下:

(1)新建工程,并在src/main/java文件下新建package包javagen(这里不同于网上所说在java同级目录下建立java-gen)。

(2)配置 Android 工程(app)的 build.gradle,添加

sourceSets {

    main {

        java.srcDirs = ['src/main/java','src/main/java/javagen']

    }

}

compile'de.greenrobot:greendao:1.3.7'


如图所示:



2.新建纯 JAVA 工程「GREENDAO GENERATOR」模块

(1)通过 File -> New -> New Module -> JavaLibrary -> 填写相应的包名与类名 -> Finish.此处本人包名为daoexamplegenerator类名为ExampleDaoGenerator,完成后编写ExampleDaoGenerator类代码,具体如下:

public class ExampleDaoGenerator {
 
    public static void main(String[] args) throws Exception {
 
     //两个参数分别代表:数据库版本号与自动生成代码的包路径。
        Schema schema = new Schema(1, "lzy.greendao");
        addNote(schema);
        // 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录。        
  New DaoGenerator().generateAll(schema,"/software_forwork/androidstudio/MyProject/
                                         DaoDemo/app/src/main/java/javagen");    
}    
    private static void addNote(Schema schema) {
 
  // 一个实体(类)就关联到数据库中的一张表,此处表名为「Note」(既类名)
        Entity note = schema.addEntity("Note");      
        note.addIdProperty();
        note.addStringProperty("text").notNull();    
        note.addStringProperty("comment");        
    }
}

3.自动生成文件

执行 generator 工程,如一切正常,你将会在控制台看到如下日志,并且在主工程「java-gen」下会发现生成了DaoMaster、DaoSession、NoteDao、Note共4个类文件。此时文件结构如下图:


4.在MainActivity中进行测试,具体代码如下:

 

public class MainActivity extends AppCompatActivity {
   
private SQLiteDatabase db;
   
private DaoMaster daoMaster;
   
private DaoSession daoSession;
   
private Cursor cursor;
   
public static final String TAG = "DaoExample";
   
@Override
 
  protectedvoid onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_main);
       
setupDatabase();
       
new Thread(new Runnable() {
           
@Override
           
public void run() {
               
deletetAll();
               
//addNote();
              
// search();
            }
       
}
        ).start();
   
}

private void setupDatabase() {
   
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
   
db = helper.getWritableDatabase();
   
// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
   
daoMaster = new DaoMaster(db);
   
daoSession = daoMaster.newSession();
}

 

private void search() {
    // Query 类代表了一个可以被重复执行的查询
    Long before=Long.valueOf(System.currentTimeMillis());
    System.out.println("查询之前的时间为:"+before);
    List<Note> list= getNoteDao().loadAll();
    System.out.println(list.get(9999).getText()+"***************************************");
    Long after=Long.valueOf(System.currentTimeMillis());
    System.out.println("查询之后的时间为:"+after);
    System.out.println("时间差为"+(after-before)+"毫秒");
}
public void deletetAll () {
   
Long before=Long. valueOf(System. currentTimeMillis()) ;
   
System. out .println( " 删除之前的时间为: " +before) ;
   
getNoteDao().deleteAll() ;
   
Long after=Long.valueOf(System.currentTimeMillis()) ;
   
System. out .println( " 删除之后的时间为: " +after) ;
   
System. out .println( " 时间差为 " +(after-before)+ " 毫秒 " ) ;

}

private void addNote() 
    String noteText = "小明";
    String comment = "Added on ";
    // 插入操作,简单到只要你创建一个 Java 对象
    Note note =null;
    Long before=Long.valueOf(System.currentTimeMillis());
    System.out.println("存储之前的时间为:"+before);
  for(int i=0;i<10000<
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值