powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тормоза на операциях с массивами
12 сообщений из 12, страница 1 из 1
Тормоза на операциях с массивами
    #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
Тормоза на операциях с массивами
    #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
Тормоза на операциях с массивами
    #39312176
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алекссс
Код: plsql
1.
  PROCEDURE plus(ar IN OUT t_rec, i NUMBER, arp tt_rec, j NUMBER) IS

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

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

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

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


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