Насколько дорогой reloadData UITableView?

Триггер оператора (который не имеет FOR EACH ROW) не может использовать :OLD и :NEW, потому что у него нет доступа к значениям строки. Но в этом случае они вам на самом деле не нужны - вам просто нужно думать по-другому.

Что вас волнует, так это то, что после выполнения заявления есть люди с более чем тремя навыками? Так что вам нужно выяснить, как найти этот бит информации.

Следующее должно сделать это для вас:

create or replace trigger checkskillnum
  before insert or update on sneeded
begin
  FOR aRow IN (select pnumber, count(*) as SKILL_COUNT
                 from sneeded 
                 group by pnumber
                 order by COUNT(*) DESC)
  LOOP
    IF aRow.SKILL_COUNT > 3 THEN
      RAISE_APPLICATION_ERROR(-20030, 'A position does not need more than 4 skills');
    END IF;

    EXIT;    -- The first row will have the highest SKILL_COUNT, so only need to  
  END LOOP;  -- check the first row.
end CHECKSKILLNUM;

Удачи.

5
задан Coocoo4Cocoa 27 February 2009 в 16:26
поделиться

4 ответа

Лучшая практика должна иметь Вашу реализацию cellForRowAtIndexPath: действительно как можно меньше работайте. На самом деле это действительно не должно делать никакой работы кроме заполнения UITableViewCell экземпляр с данными это должно отобразиться.

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

Вы не сказали, использовали ли Вы пользовательское UITableViewCell подкласс, но если Вы, глубоко просматривает иерархии, может также представить проблему производительности, так как каждое представление в иерархии оттянуто. Более плоское можно сделать UITableViewCells, лучше.

Надежда, которая получает Вас перемещающийся в правильное направление.

5
ответ дан 18 December 2019 в 05:56
поделиться

Лучшая вещь сделать представить Ваше приложение для наблюдения, где это медленно.

Тем не менее, если Ваши ячейки таблицы являются всеми одинаковыми высота, то я думаю

reloadData

только должен звонить

cellForRowAtIndexPath

для ячеек, которые видимы на экране.

4
ответ дан 18 December 2019 в 05:56
поделиться

Начальная загрузка Голове корректна.

Я делаю прогрессивное один за другим обновление списка статьи в Instapaper, и я называю-reloadData на каждой завершенной загрузке. Звучит подобным тому, что Вы делаете. Это не приводит ни к какому значимому замедлению производительности.

1
ответ дан 18 December 2019 в 05:56
поделиться

Расходы на перезагрузку табличного представления:

  1. Определение количества разделов и строк в каждом разделе у вас
  2. получение высоты строк.

В частности, высота строк вычисляется для всех элементов таблицы каждый раз, когда вы вызываете перезагрузку данных.

Оставшиеся расходы - это cellForRowAtIndexPath, что обычно не так уж и плохо, потому что оно вызывается только для того количества строк, которое есть на экране. При прокрутке может быть плохо, если вы не используете повторно ячейки, как положено.

Ключевым моментом для вас, вероятно, будет спросить себя, что вызывает загрузку HTML, и, возможно, переместить это в фоновый поток.

2
ответ дан 18 December 2019 в 05:56
поделиться