2010-05-23 4 views
0

Обычно я хорошо знаю, что такое соображение является преждевременной оптимизацией. Прямо сейчас у меня есть некоторые обработчики событий, которые привязаны внутри цикла foreach. Мне интересно, может ли этот стиль быть подвержен утечкам или неэффективному использованию памяти из-за создания закрытий. Есть ли какое-либо обоснование для этого мышления?MonoTouch - foreach против циклов (производительность)

ответ

1

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

+0

Если анонимные методы не используются, существует ли существенная разница в производительности при использовании foreach vs for? – kwcto

+0

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

0

Если вы говорите что-то вроде этого:

foreach (var item in items) 
{ 
    item.SomeEvent += delegate { 
     // do something 
    }; 
} 

Тогда ответ производительность не заметно (в моем опыте MonoTouch так или иначе), поскольку компилятор просто создает класс с методом, таким же образом, в Компилятор Microsoft C#.

Самые большие узкие места производительности, с которыми я столкнулся в Monotouch, связаны с SQLite и анализируют DateTimes. Все остальное, в том числе сложные заявления LINQ, влетает в 3GS - я не уверен, что магия выполняется компилятором AOT, но я бы волновался, если он ползет до 0,5 или более секунд, чтобы выполнить задачу.

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