MonoTouch - foreach против петель (производительность) - PullRequest
0 голосов
/ 23 мая 2010

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

Ответы [ 2 ]

1 голос
/ 23 мая 2010
Замыкания

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

0 голосов
/ 26 мая 2010

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

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

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

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

...