Финансы без пpоблем: Пеpеговоpный Пункт II (http://hdru.com/cgi-bin/pp2/YaBB.cgi)
>> Пpедложения по усовеpшенствованию, сообщения об ошибках >> printstr BIGSTRING to file NF
(Message started by: Boris, Kiev. на 21.05.08 в 10:15:48)

Заголовок: printstr BIGSTRING to file NF
Прислано пользователем Boris, Kiev. на 21.05.08 в 10:15:48
Всё чаще приходится экспортировать для разных служб предприятий всякого рода отчётов.
При объеме свыше 10тыс. строк время на экспорт отчета в требуемых форматах(html,xml) более 2,3 минут на машинах с raid0-массивами, про менее производительные не говорю.

Вариаты вывода

^^ST>>file NF

или

printstr ST to file NF

мало чем отличаются по производительности.

Кто знает на сегодня методы ускорения этих операторов?

Если бы родить безразмерную переменную BIGSTRING, наполнить её на финише написания формы всеми строками требуемого отчета и сказать:

printstr BIGSTRING to file NF

Интересно на сколько бы печать прошла быстрее. ???


Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Jhon на 21.05.08 в 12:25:33
Вывод в файл столько времени не занимает.
Вероятно, задержка связана с подготовкой данных для вывода.
Простая форма, выводящая 20000 длинных строк, выполняется у нас на машине 5 сек.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Denis, Dnepropetrovsk на 21.05.08 в 14:23:46
У меня тоже была такая проблема  :)
Возможно у Вас стоит антивирус, проверяющий открытие закрытие файла....    Попробуйте отключить проверку или выводите отчет в файл с безобидным расширением )).  Например я у себя вывожу отчет в файл *.req  ;),  а после окончания записи переименовываю его в нужный тип *.xml *.html и т.п.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Boris, Kiev. на 21.05.08 в 17:35:34

on 05/21/08 в 12:25:33, Jhon wrote:
Вывод в файл столько времени не занимает.
Вероятно, задержка связана с подготовкой данных для вывода.
Простая форма, выводящая 20000 длинных строк, выполняется у нас на машине 5 сек.


ФБП-сервер имеет средство контроля за расходом времени по строкам формы, так что читайте руководство. :(

Внимательнее читайте вопрос, речь идет о создании файла в требуемом формате(html)
Например, анализ расчетного счёта за 4 месяца занимает почти 40Мб, если спросите: "кому - это надо?", вопрос не ко мне. Excel такой отчёт загружает на той же машине более 3 минут. :o

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Boris, Kiev. на 21.05.08 в 17:42:48

on 05/21/08 в 14:23:46, Denis, Dnepropetrovsk wrote:
У меня тоже была такая проблема  :)
Возможно у Вас стоит антивирус, проверяющий открытие закрытие файла....    Попробуйте отключить проверку или выводите отчет в файл с безобидным расширением )).  Например я у себя вывожу отчет в файл *.req  ;),  а после окончания записи переименовываю его в нужный тип *.xml *.html и т.п.

Да, каждый борется по своему.
Уточню, на машине антивируса нет.
На машинах где стоят антивирусные программы требую у администраторов, чтобы все ФБП-каталоги числились в исключениях.

Неужели никто у нас никогда не мечтал о такой перменной(BIGSTRING). Только представьте операцию поиска.... ;)

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Alexander_Kiev на 21.05.08 в 23:37:38

on 05/21/08 в 10:15:48, Boris, Kiev. wrote:
Если бы родить безразмерную переменную BIGSTRING, наполнить её на финише написания формы всеми строками требуемого отчета и сказать:

printstr BIGSTRING to file NF

Интересно на сколько бы печать прошла быстрее. ???

Поможет, в случае ежли каждый оператор записи в файл открывает и закрывает его, чего скорей всего нет.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Boris, Kiev. на 22.05.08 в 06:43:34

on 05/21/08 в 23:37:38, Alexander_Kiev wrote:
Поможет, в случае ежли каждый оператор записи в файл открывает и закрывает его, чего скорей всего нет.


Друг мой, а это что такое:

        >> file FW
        print    '<meta http-equiv="Content-Type" content="text/html; charset=CP866">'
        > file (ending)

 :o

И так каждую строчку...

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Arkady на 22.05.08 в 07:52:01

on 05/21/08 в 17:42:48, Boris, Kiev. wrote:
На машинах где стоят антивирусные программы требую у администраторов, чтобы все ФБП-каталоги числились в исключениях.


Неизвестно как те исключения обрабатываются. Скорее всего, антивирус получает от системы извещение о каждом открытии файла и решает, принадлежит ли каталог к списку исключенных. A это тоже заметная задержка.

По поводу скорости. Я не могу воспроизвести такую медленную запись. Пишу 10 000 строк по 75 байт за 3с и 100 000 таких же за 20с. Это на ноутбуке Celeron M 1.4 Ггц 512Мб XP  На настольных машинах примерно то же получается.

Но тут есть нюанс! 100 000  строк за 20с - это  при добавлении к файлу C:\test.txt. С файлом C:\test\test\test\test\test\test\test.txt получим 35с,  а с 12-ю уровнями вложенности будет уже 50с.

P.S. По поводу "BIGSTRING". Я могу ввести новый оператор для вывода массива в файл - с одним открытием и закрытием файла.  То есть надо будет сначала  присвоить элементам массива строки и затем вызвать этот  printarray ... to file ... .

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Denis, Dnepropetrovsk на 22.05.08 в 08:51:31

on 05/22/08 в 07:52:01, Arkady wrote:
P.S. По поводу "BIGSTRING". Я могу ввести новый оператор для вывода массива в файл - с одним открытием и закрытием файла.  То есть надо будет сначала  присвоить элементам массива строки и затем вызвать этот  printarray ... to file ... .


Это было бы неплохо,  скорее всего так сервер и формирует ответ на запрос  ;). Уж очень быстро формируется отчетная форма по сравнению с построчным выводом в файл  :).

К тому же при плохой сети (у нас одно время свич глючил ) при выводе в файл на сетевой папке (расположенной на другом компе) некоторые строчки пропадают  :(. Думаю printarray решит такую проблему.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Boris, Kiev. на 22.05.08 в 08:58:12

on 05/22/08 в 07:52:01, Arkady wrote:
Неизвестно как те исключения обрабатываются. Скорее всего, антивирус получает от системы извещение о каждом открытии файла и решает, принадлежит ли каталог к списку исключенных. A это тоже заметная задержка.

По поводу скорости. Я не могу воспроизвести такую медленную запись. Пишу 10 000 строк по 75 байт за 3с и 100 000 таких же за 20с. Это на ноутбуке Celeron M 1.4 Ггц 512Мб XP  На настольных машинах примерно то же получается.

Но тут есть нюанс! 100 000  строк за 20с - это  при добавлении к файлу C:\test.txt. С файлом C:\test\test\test\test\test\test\test.txt получим 35с,  а с 12-ю уровнями вложенности будет уже 50с.

P.S. По поводу "BIGSTRING". Я могу ввести новый оператор для вывода массива в файл - с одним открытием и закрытием файла.  То есть надо будет сначала  присвоить элементам массива строки и затем вызвать этот  printarray ... to file ... .


Спасибо, будем очень ждать printarray.
Если не затруднит о невозможности открытия в нашем языке большой, а ещё лучше безразмерной переменной.

Про нюанс.
Это явление носит общий характер для Windows систем или как?

Насчёт антивирусов, надо полагать что как-бы не крутили с расширениями и исключениями, результат один - та же задержка.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Arkady на 22.05.08 в 10:41:08

on 05/22/08 в 08:58:12, Boris, Kiev. wrote:
...
Если не затруднит о невозможности открытия в нашем языке большой, а ещё лучше безразмерной переменной.

Про нюанс.
Это явление носит общий характер для Windows систем или как?


А разве массивы не выполняют роль таких переменных? Ведь легко опеределить собственные функции и подпрограммы, рассматривающие массив строк как единoe целое и скрывающие детали устройства.

Что касается зависимости времени открытия файла от уровня вложенности его имени, то это легко объяснить: каждый уровень - это прыжок от таблицы к таблице. Но пока пробовал только в XP. Вообще-то они могли бы там для таких случаев и кэш какой-нибудь организовать, чтобы ускорить повторные открытия.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Alexander_Kiev на 22.05.08 в 12:54:33
Зная как в принципе устроены "безразмерные" строки, вчерась хотел предложить поиграться с массивом, но потом вовремя одумался, а вдруг там каждый раз открывается и закрывается файл. А оператор вывода массива блоков символов в файл - самое оно.  :)

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Boris, Kiev. на 22.05.08 в 13:58:33

on 05/22/08 в 10:41:08, Arkady wrote:
А разве массивы не выполняют роль таких переменных? Ведь легко опеределить собственные функции и подпрограммы, рассматривающие массив строк как единoe целое и скрывающие детали устройства.


Если легко, то может быть несложно сравниться по скорости работы с нашим мостом FWP_WORD.
Задача простая, модифицировать текстовый файл с ограниченной длиной строк с правилом перехода на следующую строку, который содержит метки. Короткие метки должны быть заменены другими контекстами, которые также могут быть очень большими.


Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Boris, Kiev. на 23.05.08 в 10:24:27

on 05/22/08 в 07:52:01, Arkady wrote:
..
P.S. По поводу "BIGSTRING". Я могу ввести новый оператор для вывода массива в файл - с одним открытием и закрытием файла.  То есть надо будет сначала  присвоить элементам массива строки и затем вызвать этот  printarray ... to file ... .


Представил объём работы после ввода printarray.
Не мало.

Ведь у нас есть:

\>file NF

для инициализации,

может быть проще ввести типа

\\>file NF

для закрытия.

а все:

^^^ST>>file NF
printstr ST to file NF

почистить от открытия-закрытия

В случае, если в форме явно не прописано:

\\>file NF

,то закрыть принудительно по завершению формы.


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


Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Alexander_Kiev на 23.05.08 в 11:14:16

on 05/23/08 в 10:24:27, Boris, Kiev. wrote:
В случае, если в форме явно не прописано:

\\>file NF

,то закрыть принудительно по завершению формы.

А как в runtime узнать какие файлы открывались и есть ли что закрывать?
На счет общего кол-ва открытых файлов не беспокойся. 1цэ их сотнями держит в таком состоянии.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Boris, Kiev. на 23.05.08 в 12:16:56

on 05/23/08 в 11:14:16, Alexander_Kiev wrote:
А как в runtime узнать какие файлы открывались и есть ли что закрывать?
На счет общего кол-ва открытых файлов не беспокойся. 1цэ их сотнями держит в таком состоянии.


Вот интересно, построчно открывать и закрывать  - знаем, а на выходе формы - не знаем ;D
Может тебе RPT-алгоритм пописать, а то с такими терминами и логику забудешь напрочь.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Alexander_Kiev на 23.05.08 в 12:47:35

on 05/23/08 в 12:16:56, Boris, Kiev. wrote:
Вот интересно, построчно открывать и закрывать  - знаем, а на выходе формы - не знаем ;D
Может тебе RPT-алгоритм пописать, а то с такими терминами и логику забудешь напрочь.

Что же здесь не естественного, процедура записи строки - один фрагмент компиляции.
Твоя же постановка задача соизмерима с воспроизведением алгоритма исскуственного интеллекта. Не забывай, что могут иметь место всякие условия выполнения/невыполнения разрозненных частей кода. Ну а как ты заблаговременно (на фазе компиляции) например   "расскажешь" компилятору, что виртуальная машина будет иметь дело с тем, что выдаст функция [dir 0] ?
И еще одно. Операционка уровня WINDOWS оснащена кучей прибамбас направленных на оптимизацию работы приложений. Не факт, что массовая процедура открытия/закрытия одного и того же файла пройдет мимо кеширования.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Vitaly на 23.05.08 в 13:30:36

on 05/23/08 в 12:47:35, Alexander_Kiev wrote:
Не забывай, что могут иметь место всякие условия выполнения/невыполнения разрозненных частей кода.
Человеку, занимающемуся конфигурированием работы платформы, платят деньги за то, что он эти условия контролирует и за свои ошибки отвечает.
Я поддерживаю структуру: ОТКРЫЛ - ЗАПИСАЛ - ЗАКРЫЛ. А уж отдельными-ли строками или используя массив - это выбор личных привелегий.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Boris, Kiev. на 23.05.08 в 14:25:33

on 05/23/08 в 12:47:35, Alexander_Kiev wrote:
Что же здесь не естественного, процедура записи строки - один фрагмент компиляции.
Твоя же постановка задача соизмерима с воспроизведением алгоритма исскуственного интеллекта. Не забывай, что могут иметь место всякие условия выполнения/невыполнения разрозненных частей кода. Ну а как ты заблаговременно (на фазе компиляции) например   "расскажешь" компилятору, что виртуальная машина будет иметь дело с тем, что выдаст функция [dir 0] ?
И еще одно. Операционка уровня WINDOWS оснащена кучей прибамбас направленных на оптимизацию работы приложений. Не факт, что массовая процедура открытия/закрытия одного и того же файла пройдет мимо кеширования.


close2:
       mov ah,3Eh
       mov bx,[handle2]
       int 21h
       
             
close1:
       mov ah,3Eh
       mov bx,[handle1]
       int 21h
       
5-ти звездочный ты наш, не пудри...        

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Alexander_Kiev на 23.05.08 в 14:25:57

on 05/23/08 в 13:30:36, Vitaly wrote:
Я поддерживаю структуру: ОТКРЫЛ - ЗАПИСАЛ - ЗАКРЫЛ.

Ну и пральна, в Финансах пользователю предоставляют только "ЗАПИСАЛ" остальное подмешивается при компиляции. Гибкости меньше, но и требований к квалификации кодера меньше.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Alexander_Kiev на 23.05.08 в 14:34:21

on 05/23/08 в 14:25:33, Boris, Kiev. wrote:
close2:
       mov ah,3Eh
       mov bx,[handle2]
       int 21h
       
             
close1:
       mov ah,3Eh
       mov bx,[handle1]
       int 21h
       
5-ти звездочный ты наш, не пудри...        


Ежли не ошибаюсь это фрагменты вызова DOS прерывания в асемблерном коде. И че этим должно было быть сказано?
Видиш, в остаткак памяти еще осталось, что int в контексте означает interrupt, а не integer, а ah и bx - внутренние регистры процессора.  


Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Arkady на 23.05.08 в 14:57:17
Ну, еще можно добавить в язык два новых оператора:

1) не_закрывать_ничего_просто_один_раз_открыть_если_надо

2) закрыть_всех_открытых

Тогда формы не потребуют большой переделки,  только первый оператор - в начало, а второй - в конец.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем alushta на 24.05.08 в 05:10:59

Quote:
только первый оператор - в начало, а второй - в конец.
этот подход мне нравится

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Boris, Kiev. на 24.05.08 в 07:03:51

on 05/23/08 в 14:57:17, Arkady wrote:
Ну, еще можно добавить в язык два новых оператора:

1) не_закрывать_ничего_просто_один_раз_открыть_если_надо

2) закрыть_всех_открытых

Тогда формы не потребуют большой переделки,  только первый оператор - в начало, а второй - в конец.


Просто SUPER

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Vitaly на 26.05.08 в 13:59:23

on 05/24/08 в 07:03:51, Boris, Kiev. wrote:
Просто SUPER
+1

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Tupitsin на 27.05.08 в 08:52:06
А что будет, если форма заканчивается аварийно, не дойдя до оператора "закрыть_всех_открытых "?  Добавлять обработку ошибок?

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Alexander_Kiev на 27.05.08 в 13:07:57

on 05/27/08 в 08:52:06, Tupitsin wrote:
А что будет, если форма заканчивается аварийно, не дойдя до оператора "закрыть_всех_открытых "?  Добавлять обработку ошибок?

Молодцом Дмитрий!
Безусловно, потребуется мониторить всю область выполнения, включая и возможные ошибки кодера, сразу после первого открытия файла.
Посему самое первое предложение - вывод массива, на мой взгляд, самое оптимальное.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Tupitsin на 27.05.08 в 13:30:49

on 05/27/08 в 13:07:57, Alexander_Kiev wrote:
Посему самое первое предложение - вывод массива, на мой взгляд, самое оптимальное.

Согласен.

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем alushta на 27.05.08 в 19:47:14

Quote:
А что будет, если форма заканчивается аварийно, не дойдя до оператора "закрыть_всех_открытых "?

А сейчас что не заканчивается аварийно новая форма при отладке. Значит отлаживаем фору, а потом добавляем два оператора: один в начало а другой в конец

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Alexander_Kiev на 27.05.08 в 21:19:13

on 05/27/08 в 19:47:14, alushta wrote:
А сейчас что не заканчивается аварийно новая форма при отладке. Значит отлаживаем фору, а потом добавляем два оператора: один в начало а другой в конец

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

Заголовок: Re: printstr BIGSTRING to file NF
Прислано пользователем Vitaly на 03.06.08 в 11:35:29

on 05/27/08 в 08:52:06, Tupitsin wrote:
А что будет, если форма заканчивается аварийно, не дойдя до оператора "закрыть_всех_открытых "?  Добавлять обработку ошибок?

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



Powered by YaBB 1 Gold - SP 1.3.2!
Forum software copyright й 2000-2004 Yet another Bulletin Board