Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тормоза на операциях с массивами / 12 сообщений из 12, страница 1 из 1
20.09.2016, 18:06
    #39312171
Алекссс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
11.2.0.4
На рабочих данных двойной цикл в конце кода крутится 2,5 секунды (на пустых 0,1)
это нормально?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
DECLARE
  TYPE rec IS RECORD(
    id    NUMBER,
    sum1  binary_float := 0,
    sum2  binary_float := 0,
    sum3  binary_float := 0,
    sum4  binary_float := 0,
    sum5  binary_float := 0,
    sum6  binary_float := 0,
    sum7  binary_float := 0,
    sum8  binary_float := 0,
    sum9  binary_float := 0,
    sum10 binary_float := 0,
    sum11 binary_float := 0,
    sum12 binary_float := 0,
    sum13 binary_float := 0,
    sum14 binary_float := 0,
    sum15 binary_float := 0,
    sum16 binary_float := 0,
    sum17 binary_float := 0,
    sum18 binary_float := 0);
  TYPE t_rec IS TABLE OF rec INDEX BY PLS_INTEGER;
  TYPE tt_rec IS TABLE OF t_rec INDEX BY PLS_INTEGER;
  arm  tt_rec;
  ar t_rec;
  PROCEDURE plus(ar IN OUT t_rec, i NUMBER, arp tt_rec, j NUMBER) IS
  BEGIN
    ar(i).sum1 := ar(i).sum1 + arp(j)(i).sum1;
    ar(i).sum2 := ar(i).sum2 + arp(j)(i).sum2;
    ar(i).sum3 := ar(i).sum3 + arp(j)(i).sum3;
    ar(i).sum4 := ar(i).sum4 + arp(j)(i).sum4;
    ar(i).sum5 := ar(i).sum5 + arp(j)(i).sum5;
    ar(i).sum6 := ar(i).sum6 + arp(j)(i).sum6;
    ar(i).sum7 := ar(i).sum7 + arp(j)(i).sum7;
    ar(i).sum8 := ar(i).sum8 + arp(j)(i).sum8;
    ar(i).sum9 := ar(i).sum9 + arp(j)(i).sum9;
    ar(i).sum10 := ar(i).sum10 + arp(j)(i).sum10;
    ar(i).sum11 := ar(i).sum11 + arp(j)(i).sum11;
    ar(i).sum12 := ar(i).sum12 + arp(j)(i).sum12;
    ar(i).sum13 := ar(i).sum13 + arp(j)(i).sum13;
    ar(i).sum14 := ar(i).sum14 + arp(j)(i).sum14;
    ar(i).sum15 := ar(i).sum15 + arp(j)(i).sum15;
    ar(i).sum16 := ar(i).sum16 + arp(j)(i).sum16;
    ar(i).sum17 := ar(i).sum17 + arp(j)(i).sum17;
    ar(i).sum18 := ar(i).sum18 + arp(j)(i).sum18;
  END;
BEGIN

  -- Инициализация
  FOR i IN 1 .. 260 LOOP
    ar(i).id := i;
    FOR j IN 1 .. 17 LOOP
      arm(j)(i).id := j + i;
    END LOOP;
  END LOOP;

  -- Этот код выполняется 2,5 секунды
  FOR i IN 1 .. 260 LOOP
    FOR j IN 1 .. 17 LOOP
      plus(ar, i, arm, j);
    END LOOP;
  END LOOP;

END;
...
Рейтинг: 0 / 0
20.09.2016, 18:12
    #39312174
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
Алекссс11.2.0.4
На рабочих данных двойной цикл в конце кода крутится 2,5 секунды (на пустых 0,1)
это нормально?

Это не нормально! На IBM PC/XT 4.5 Mz такой цикл должен крутиться намного дольше! IMHO )))

Алекссс PROCEDURE plus(ar IN OUT t_rec, i NUMBER, arp tt_rec, j NUMBER) IS

NOCOPY насколько меняет время выполнения?
...
Рейтинг: 0 / 0
20.09.2016, 18:18
    #39312176
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
Алекссс
Код: plsql
1.
  PROCEDURE plus(ar IN OUT t_rec, i NUMBER, arp tt_rec, j NUMBER) IS

Зачем коллекции передавать параметрами? -> 3-й уровень оптимизации или явный pragma inline
...
Рейтинг: 0 / 0
20.09.2016, 18:24
    #39312177
Алекссс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
ElicАлекссс
Код: plsql
1.
  PROCEDURE plus(ar IN OUT t_rec, i NUMBER, arp tt_rec, j NUMBER) IS

Зачем коллекции передавать параметрами?
их несколько разных надо передать
...
Рейтинг: 0 / 0
20.09.2016, 18:29
    #39312182
Алекссс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
ElicЗачем коллекции передавать параметрами?
убрал процедуру - залетало
что-нибудь еще лучше не передавать в функции?
...
Рейтинг: 0 / 0
20.09.2016, 18:32
    #39312184
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
Алексссчто-нибудь еще лучше не передавать в функции?

По значению лучше не передавать ничего кроме мелких примитивных типов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.09.2016, 18:38
    #39312190
Алекссс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
Dimitry Sibiryakov, а как тогда?
...
Рейтинг: 0 / 0
20.09.2016, 18:39
    #39312191
Алекссс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
Elicявный pragma inline
не сработал кстати
...
Рейтинг: 0 / 0
20.09.2016, 18:47
    #39312200
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
Алекссса как тогда?

NOCOPY
...
Рейтинг: 0 / 0
20.09.2016, 18:47
    #39312201
Алекссс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
Leonid KudryavtsevNOCOPY насколько меняет время выполнения?
бинго!
...
Рейтинг: 0 / 0
20.09.2016, 19:01
    #39312215
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
Алексссбинго!
Со второго раза таки заметил... Удивительно!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.09.2016, 19:01
    #39312216
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза на операциях с массивами
АлексссElicявный pragma inlineне сработал кстатиРуки?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тормоза на операциях с массивами / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]