Примечание. Ваш пример программы в значительной степени является микротестом и очень эффективно максимально увеличивает стоимость средства форматирования даты. Вы сравниваете абсолютно ничего не делать с что-то делать. Таким образом, чем бы это ни было что-то, оно окажется в несколько раз медленнее, чем ничего.
Такие тесты чрезвычайно ценны и вводят в заблуждение. Микротесты обычно полезны только тогда, когда у вас есть реальный случай Teh Slow. Если бы вы сделали этот тест в 10 раз быстрее (что, на самом деле, вы, вероятно, могли бы сделать, используя то, что я предлагаю ниже), но в реальном мире всего лишь 1% от общего времени процессора, используемого в вашем приложении, конечный результат не будет резкое улучшение скорости - это будет еле заметно.
В чем причина таких затрат?
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyyMMdd HH:mm:ss.SSS"];
Скорее всего, стоимость связана как с необходимостью синтаксического анализа / проверки строки формата даты, так и с необходимостью выполнения любого вида goop для конкретной локали, который делает NSDateFormatter
. Какао имеет чрезвычайно полную поддержку локализации, но за эту поддержку приходится платить.
Увидев, как вы написали довольно замечательный пример программы, вы можете запустить свое приложение в инструментах и попробовать различные инструменты выборки ЦП, чтобы понять, что потребляет циклы ЦП и как работают инструменты (если вы найдете что-нибудь интересное, пожалуйста < / em> обновите свой вопрос!).
Может ли быть блокировка, когда потоки должны ждать друг друга?
Я удивлен, что он не просто падает, когда вы используете один форматтер из нескольких потоков. NSDateFormatter
конкретно не упоминает, что это потокобезопасный. Таким образом, вы должны предполагать, что он не является потокобезопасным.
Как я могу улучшить использование?
Не создавайте столько средств форматирования даты!
Либо оставьте один для пакета операций, а затем избавьтесь от него, либо, если вы используете их все время, создайте его в начале выполнения вашего приложения и держите его до тех пор, пока формат не изменится.
Для потоковой передачи держите по одной на поток, если вам действительно нужно (держу пари, что это чрезмерно - архитектура вашего приложения такова, что создание одной для каждой партии операций будет более разумным).
person
bbum
schedule
14.12.2010
m_
, но ... тем не менее ... это отличная отправная точка для глубокого погружения с инструментами, сэмплированием, потоковой передачей и т. Д. - person bbum   schedule 14.12.2010