2012-08-01 2 views
1

Im, вставляющий огромное количество данных в базу данных sqlite. Теперь требуется много времени, чтобы завершить процесс, который будет искажать пользователя. Может ли кто-нибудь здесь дать мне представление о том, как сделать этот процесс быстрым или альтернативным.Вставка огромного количества данных в базу данных sqlite длительное время

PLSS помочь мне ..

+0

ли это важно, если транзакция завершается до программа переходит? – borrrden

+0

попробуйте lasy load technique .. даже с этим, если вы используете большую часть БД, это очевидно .. вы можете использовать NSUser по умолчанию несколько раз вместо этого – iMeMyself

ответ

1
  1. Если вы храните изображения или тому подобное, считают не хранить, что в базе данных, так как это довольно неэффективный сделать это. Храните эти двоичные данные в папке «Документы», и если вам нужно отслеживать их в базе данных, сделайте это, сохранив имена файлов в базе данных, но не изображение.

  2. Если это вообще возможно, выполните эти операции в фоновом режиме, например, через Grand Central Dispatch или NSOperationQueue. Эти технологии также обсуждаются в Concurrency Programming Guide. Если вы делаете это с помощью оболочки SQLite, например отличной FMDB (которую я сердечно рекомендую вам исследовать, если вы еще этого не сделали), вы можете использовать ее FMDatabaseQueue (который использует GCD) для координации операций с базой данных с запросами базы данных переднего плана , Поскольку это использование очередей, вы просто хотите, чтобы избежать разрыва операций базы данных в небольших задачах, если это возможно, чтобы избежать восприятия блокировки операций базы данных переднего плана.

0

NSOperationQueue обеспечить потоки, используемые для выполнения своих операций.

Создайте NSInvocationOperation объектов и добавьте его в массив NSOperationQueue.

NSInvocationOperation *insertOperationObject1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(insertMethod1) object:nil]; 
    NSInvocationOperation *insertOperationObject2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(insertMethod2) object:nil]; 
    NSInvocationOperation *insertOperationObject3 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(insertMethod3) object:nil]; 

// добавление базы данных операций извлечения на NSOperationQueue

NSOperationQueue  *m_opqInsertQueue = [[[NSOperationQueue alloc] init] autorelease]; 
     [m_opqCustomerProfileDataFetchQueue setMaxConcurrentOperationCount:1]; 
     [m_opqCustomerProfileDataFetchQueue addOperations:[NSArray arrayWithObjects:insertOperationObject1, insertOperationObject2, insertOperationObject3, nil] waitUntilFinished:NO]; 
Смежные вопросы