将更多记录(近100000条记录)插入数据库时出现内存不足错误



我正在通过后台线程将100000条记录插入数据库。此时,当我想要加载Ui屏幕时,我会出现内存不足错误。例如,当堆大小为5MB,并且4MB分配给后台线程时,加载UI屏幕需要2MB。所以在这种情况下,我会出现内存不足的问题。请告诉我我需要在这里做些什么来解决内存不足的问题。

尝试一次插入100,而不是一次插入1000。这将大大减少后台线程的内存使用量。

如果您的记录以XML的形式来自服务器,则不要使用DOM解析器;这是一个记忆猪。请改用SAX、StAX或pull解析器。

最后,请确保在插入记录后没有保留对不需要的对象的引用。

我认为你应该使用更少的内存。。。

那一百万张唱片来自某个地方。不要一次把它们全部保存在内存中——如果你读了它们,就在读的时候把它们写进数据库——一次一块(比如说,一次1000块?)。如果你生成它们,不要一次生成所有的,而是一次生成一块。

从不同于主线程或进程的单独线程插入所有记录。使用android中的IntentService类在数据库中插入大量条目,这不会影响您的UI。例如:

 public class BackgroundService extends IntentService {
            EventDataSQLHelper eventsData;
            SQLiteDatabase dbx ;
            SQLiteDatabase rdbx;
            ContentValues values;
            public BackgroundService() {
                super("BackgroundService");
            }
            @Override
            protected void onHandleIntent(Intent intent) {
                // TODO Auto-generated method stub
                eventsData=new EventDataSQLHelper(BackgroundService.this);
                values=new ContentValues();
                dbx = eventsData.getWritableDatabase();    
                rdbx = eventsData.getReadableDatabase();
                for(int i=0;i<100000;i++)
        {
        dbx.insert("tablename", null,values);
        }

                dbx.close();

            }

            }

最新更新