1

Я бы хотел, чтобы приложение добавило несколько слов (2k) в UserDictionary.Самый быстрый способ вставить слова в UserDictionary

Я экспериментировал с ContentResolver(). Вставка/насыпной вставка ....

// array of words 
    String[] words = getResources().getStringArray(R.array.word_array); 

    Long start,end = null; 

    start = System.currentTimeMillis(); 


    int len = words.length; 
    ContentValues[] mValueArray = new ContentValues[len]; 
    ContentValues mNewValues = new ContentValues(); 

    mNewValues.put(UserDictionary.Words.APP_ID, "com.my.example"); 
    mNewValues.put(UserDictionary.Words.LOCALE, "en"); 
    mNewValues.put(UserDictionary.Words.FREQUENCY, "100"); 

    for (int i = 0; i < len; ++i) { 

     mNewValues.put(UserDictionary.Words.WORD, words[i]); 

     mValueArray[i] = mNewValues; 
    } 

    getContentResolver().bulkInsert(
      UserDictionary.Words.CONTENT_URI, // the user dictionary content URI 
      mValueArray      // the values to insert 
     ); 
    end = System.currentTimeMillis(); 

    Toast toast = Toast.makeText(this, "Time for " + Integer.toString(len-1)+" words: " + Long.toString((end-start)) + "ms", 50); 
    toast.show(); 

На моем телефоне занимает около 100 мс за слово, если я bulkinsert на партиях 100. 3+ минут, чтобы вставить 2k слова.

Кому-нибудь известно о более быстром способе вставки слов или любой оптимизации, которая может быть выполнена?

Боковой вопрос: существует ли верхний предел для размера UserDictionary или это зависит от телефона?

Любая помощь оценили

Michealster

ответ

2

Удельный для вашего случая: Добавление 2000 слов в словаре на растяжке потребует времени, и нет большой оптимизации, которая может быть выполнена. Время, которое вы видите здесь, для операции с файлом и перехода из Java-> NDK-> Native.

Общие сведения: Независимо от используемого метода, необходимо понимать, что это ничего, кроме операций с файлами, и он требует времени. API-интерфейсы (включая связанные с SQLite) являются всего лишь оболочкой для предполагаемых операций с файлами в собственном коде. Натуральная запись файла всегда занимает больше времени, чем чтение файла.

1

Я видел в источниках Android, что для больших запросов SQL используется метод applyBatch. В некоторых других программах, таких как ContactsRemover, авторы также используют этот метод. Но я не знаю, действительно ли это быстрее, чем insert или bultInsert.

+0

Пробовал применятьBatch, похоже, примерно в то же время. Удивительно, что при одном и том же коде вне зависимости от метода существует довольно много изменчивости (~ +/- 10%). Поскольку @PravinCG заявляет, что принципиально не может сделать запись файлов быстрее, независимо от оболочки. – user1094747

Смежные вопросы