Re: Кажется, могут лучше, если захотят



Posted by Владимир Секретев, Клуб Любителей Бухгалтерского Учета on August 18, 1999 at 00:28:34:

In Reply to: Операторы array и так работают хорошо. posted by Аркадий Водяник on August 16, 1999 at 11:38:49:


: Не по делу, но без обид: не приемлю твое "Профайлер": у нас Лиза - там Лайза,
: у нас Микрософт - там Майкрософт и т.д.

Хорошо, буду писать "профилер", но, чур, с ударением на "о": профилер. Тогда сразу ясно, что это слово произошло от слова "профиль", а то можно подумать - от слова "профессиональный Филя" :).


: Так что же должен делать array? Всего только присваивать нулевому элементу
: массива значение 0. При извлечении элемента массива производится сравнение
: запрашиваемого индекса со значением, хранящемся в нулевом элементе массива.
: В том случае, если индекс оказывается больше, возвращается 0. При этом даже
: поиск элемента массива выполнять нет никакой необходимости. Наверно это
: будет работать очень быстро.


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

Спору нет, память высвобождать надо. Но делать это оператором "array буква" нет смысла, так как в настоящий момент, как я понимаю, все массивы инициализируются, т. е. память от них высвобождается ПЕРЕД выполнением формы. Таким образом, ОДНОКРАТНОЕ применение array в начале формы или в ее конце бессмысленно, ибо оно и так производится неявно. Из этого следует, что применять "array буква" пользователи будут только в случае необходимости МНОГОКРАТНО "сбросить" массив, с целью заполнить его новыми данными. Если предполагается, что массив после array будет снова заполнен, то зачем память перед этим высвобождать, чтобы потом опять захватывать?
Я выделил слово "ПЕРЕД", чтобы подчеркнуть еще раз мысль о том, что я считаю более рациональным делать это ПОСЛЕ выполнения формы. В этом случае у нас есть информация о том, какие массивы и какого размера образованы, то есть что, собственно, высвобождать и, таким образом, этот процесс будет более оптимальным.
Однако, как это не покажется парадоксальным, прошу уважаемого Автора не менять алгоритм "ПЕРЕД" на "ПОСЛЕ". Почему? По очень важной причине. А вот по какой - предлагаю игру для посетителей доски (кажется, это входит в моду) - "блиц ринг" - ваши соображения, коллеги!



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

А вот тут, наверное, кроется ответ на вопрос о том, почему "array буква" долго работает. При многократном захвате и высвобождении памяти, вероятно и возникает "многоблочие", снижающее эффективность работы. Однако это только мое предположение, могущее, в силу не известных мне механизмов реализации массивов в программе, оказаться не верным.


А откуда известно, Володя, что до этого делалось с [set % ...] до этого?
Строка 0007. Сколько ей, бедной, пришлось блоков освободить?

Володя, откуда я знаю, что было до этого ?!
Нужны дополнительные данные: сколько, что, как?

Ничего не было. В начале своего сообщения я написал, что все тесты выполнялись после рестарта сервера и единственная форма sys0001 выполнялась один раз. Кроме того, я не указал, винюсь, что операторы, связанные с массивами и [set %] встречаются только в приведенных фрагментах.




Пpишедшие ответы: