2015-03-17 2 views
0

Я считаю, что проблемы с производительностью процессора, вызванные чрезмерным использованием NSUserDefaults, возможны? Я отлаживаю код, который использовал его для хранения большого количества пользовательских данных, и теперь последующие вызовы для хранения данных говорят за 4 секунды за звонок. Что вызвало бы эти длительные задержки?NSUserDefaults, вызывающие проблемы с производительностью

// Save data in user defaults 
    NSDate *timerStartTime = [NSDate date]; 

    NSLog(@"Data Size %lu", (unsigned long)[result.data length]); 
    [self setObject:result.data forKey:defaultName]; 
    NSTimeInterval elapsed = [[NSDate date] timeIntervalSinceDate:timerStartTime]; 
    NSLog(@"Time For Function: %f", elapsed); 

и выход:

Время для функции: 4,1

+1

хорошо, а что такое _data size_? вы изящно обошли, чтобы поделиться этой информацией ... – holex

+0

вы используете iOS8 или iOS7? в iOS 8 работает намного быстрее –

+0

с использованием IOS7, и размер данных трудно сказать, потому что он хранит массив словарей с текстом в них, поэтому не уверен, как получить размер всего этого. есть 17 массивов с разными размерами, некоторые из них до 300 элементов в них – Md1079

ответ

4

Если для хранения больших объемов данных, которые вы должны определенно не использовать NSUserDefaults, чтобы сделать это.

NSUserDefaults полезен для таких вещей, как флаги, простые настройки или пользовательские переменные, такие как псевдоним и т. Д. По сути, пользовательские настройки.

Это потому, что:

  • NSUserDefaults загружается и сохраняется в полном объеме каждый раз, когда он будет загружен.
  • NSUserDefaults загружается при запуске приложения, так что вы не можете выполнить его загрузку .

Сохранения данных должны быть сделаны с использованием основных данных: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html

Или если это просто словарь или массив строк, которые вы можете использовать списки объектов: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html

NSUserDefaults ли использовать Plist для сохраните свои данные, чтобы вы столкнулись с некоторыми из тех же ограничений, но у вас будет больше контроля над тем, когда и как вы будете писать или читать свои данные. Кроме того, небезопасно использовать NSUserDefaults в качестве базы данных с перестановкой, когда она имеет целевые настройки.

+0

Я согласен, я просто задавался вопросом о причинах этого, NSuserDefaults подкрепляется MySQL или просто сохраняет файл. Если это, вероятно, означало бы копирование большого количества данных и было бы разумным с точки зрения производительности view – Md1079

+0

NSUserDefaults - это в основном NSDictionary. Данные, хранящиеся в NSUserDefaults, сохраняются в одном plist для каждого приложения (и домена ?!). Это замедляется, если вы используете огромное количество данных, потому что вся структура должна быть сохранена каждый раз. –

+0

Маттиас Бауч прав, я также обновил свой ответ с дополнительной информацией. – chrissukhram

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