«Потоковые» данные: держать анализатор открытым или постоянно создавать новый? - PullRequest
0 голосов
/ 18 февраля 2011

Я хотел знать, что более эффективно для того, что я делаю:

Я ввожу (очень маленькие - 4 КБ или меньше) файлы .xml, которые содержат GPS-координаты транспортного средства. Затем я анализирую их (очень легкий анализ) и отправляю их обратно делегату.

В настоящее время я использую таймер, который каждую 1 секунду вызывает следующее:

-(void)refreshGPSData:(NSTimer *)theTimer{
    GPSParser *parser = [[GPSParser alloc] initWithName:@"route"];
    [parser parseRssFeed:@"http://thefeed.com/feed.xml" withDelegate:self];
    [parser release];
}

У меня вопрос: будет ли эффективнее сделать это другим способом, который не будет постоянно выделяться и запускать анализатор? Должен ли я выделить + init только один парсер, а затем вызывать «parseRssFeed» каждую 1 секунду. Или я не должен использовать таймер, а вместо этого вызывать "parseRssFeed" каждый раз, когда анализатор завершает работу и возвращает данные делегату? Какова лучшая практика программирования?

Пожалуйста, дайте мне знать, если я предоставил достаточно информации. Спасибо!

1 Ответ

1 голос
/ 18 февраля 2011

Это зависит от того, как часто вы хотите использовать парсер. Если вы анализируете данные только раз в минуту, нет необходимости хранить анализатор в объекте.
Если вы анализируете данные 10 раз в секунду, вам нужно выделить один раз и сохранить анализатор.

Как сказал другой автор (который удалил свой ответ, потому что это не вопрос .net), я провел небольшой тест производительности, чтобы показать, что alloc - это действительно медленная операция.

for (NSTimeInterval i = 0; i < 1000; i++) {
    self.label1.text = [dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceNow:i]];
}

против

for (NSTimeInterval i = 0; i < 1000; i++) {
    NSDateFormatter *localDateFormatter = [[NSDateFormatter alloc] init];
    self.label2.text = [localDateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceNow:i]];
    [localDateFormatter release];
}

дал результат 0,0017 секунды для первой версии и 0,28 секунды для второй версии. Вы поймете идею. Да, NSDateFormatter может быть одним из более сложных примеров объекта.

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

...