ФИНАНСЫ БЕЗ ПРОБЛЕМ(tm):
ПЕРЕГОВОРНЫЙ ПУНКТ II

Добро пожаловать, Гость. Пожалуйста, выберите:
Вход || Регистрация.
16.10.18 в 00:49:34


Наш сайт | Cтаpый форум (до 08.2003 года) | Интернет-магазин & Центр загрузок |
Главная | Помощь | Поиск | Участники | Вход | Регистрация
Модифицированный Клиент CLW32:
Из документации ...
На форуме...

Использование Клиента FCM:
1. Отчетный период и журнал операций.
2. Печать.
3. Экспорт.
4. Многострочная операция.
5. Редактирование многострочных операций.
http://www.fwp-client.com

Работа с ФБП через браузер:
Настройка для лечебных учреждений, оказывающих медицинские услуги:
На форуме...
http://vasoft.ru

Технический аудит настройки.
[Читать]

ФИНАНСЫ БЕЗ ПРОБЛЕМ (сетевая) и Opencart:
предлагаем:
1. Выгрузка новых покупателей из интернет-магазина в план счетов и сохранение информации в extrd.dat.
2. Выгрузка данных о заказанном товаре и сохранение в ФБП в журнале операций, номер заказа регистрируем в плане счетов как с.счет.
3. Українська локалізація.






   Финансы без пpоблем: Пеpеговоpный Пункт II
   Общий pаздел

   Быстрый вывод в файл
« Предыдущая Тема | Следующая Тема »
Страниц: 1  Ответить | Уведомлять | Послать Тему | Печатать
   Автор  Тема: Быстрый вывод в файл  (Прочитано 6182 раз)
Vladimir

***



Я люблю этот Форум!

   
Просмотреть Профиль | WWW |

Сообщений: 232
Быстрый вывод в файл
« В: 16.12.16 в 23:59:16 »
Цитировать | Править

Что-то не хватает функции поиска на форуме. Стандартное решене Гугла было бы к стати.  
 
Я, собственно, во о чем.  
Где-то проходила информация (не нашел) о том, что  долго формируется отчет в файле на диске и связяно это с постоянными открытиями-закрытиями файла, еще, возможно, притормаживает антивирус...
 
У меня есть отчет, который занимет 20 метров на диске и грозит существенно увеличиться. Для ускорения его  формированя на диске я применил буферизирование. Вот подпрограммы которые я успешно  применяю уже 6 месяцев.
 
*******************************
*    Buffered file operations                    *
*******************************
* Инициализация файла
* Файл усекается до нулевой длины
:INITFILE (F)  
[set %, F, 0]
\>file F                
return
********************
* Вывод в буфер
* при переполнении буфер будет скинут на диск
: PRINTBUF (F, S)
local BF, LS, LB
  LS = [length S]
  BF = [get %, F]
  if BF = 0
    [set %, F, S]
  else
    LB = [length BF]
    if LS + LB > 255
      [:FLUSHBUF F]
      [set %, F, S]
    else
      [plus %, F, S]
    endif
  endif
return
******************
* Принудительный сброс буфера на диск
* Этой ПП должен завершаться буферизованный вывод
:FLUSHBUF (F)
  [: PRINTF F, [get %, F]]
  [set %, F, 0]
return
*  
« Изменён в : 17.12.16 в 03:00:32 пользователем: Vladimir » Зарегистрирован

С уважением,
Владимир
Boris, Kiev.
Moderator

*****



Адепт ФБП  с 1996г.

   
Просмотреть Профиль | E-мэйл

Сообщений: 827
Re: Быстрый вывод в файл
« Ответить #1 В: 17.12.16 в 15:08:12 »
Цитировать | Править

on 16.12.16 в 23:59:16, Vladimir wrote:
Что-то не хватает функции поиска на форуме. Стандартное решене Гугла было бы к стати.  
 
Я, собственно, во о чем.  
Где-то проходила информация (не нашел) о том, что  долго формируется отчет в файле на диске и связяно это с постоянными открытиями-закрытиями файла, еще, возможно, притормаживает антивирус...

 
Возможно, Вы искали это решение:
http://hdru.com/cgi-bin/pp2/YaBB.cgi?board=errors;action=display;num=146 3636010;start=5#5
 
 
По поводу вашего способа - есть скепсис, т.к.:
- часто порядок вывода строк имеет место быть в результирующем файле;
- не хватает публикации замеров времени на задачу "без" и "с" этим алгоритмом.
Зарегистрирован
Vladimir

***



Я люблю этот Форум!

   
Просмотреть Профиль | WWW |

Сообщений: 232
Re: Быстрый вывод в файл
« Ответить #2 В: 18.12.16 в 04:48:45 »
Цитировать | Править

on 17.12.16 в 15:08:12, Boris, Kiev. wrote:

- часто порядок вывода строк имеет место быть в результирующем файле;

 
Честно говоря я не понял смысла этой фразы, равно как и того, что вызвало у вас скепсис. Буферизация - стандартный прием, который используется с незапямятных времен именно для ускореня обмена данными.
 
По поводу скоростных тестов докладываю.
Вот эта программка выводит миллион строк в файл на диске.
 
 FF = [dir 0]+'z-file.txt'
 LF = [ch 13]+[ch 10]
 T0 = [:TIMER]
 [:INITFILE FF]
 for i=1 to 1000000
    SS=[intsn i]+'z dwefawfa asfawf'+LF
 *   printstr SS to file FF
   [: PRINTBUF FF, SS]
 endfor
 [:FLUSHBUF FF]
 T1 = [:TIMER]
 printstr 'Elapsed time: '+[:TIMEDCD T1-T0]+LF
 stop
 
При использовании ПП буферизации время такое:
Elapsed time: 0.0.0 0:0:34
 
Если пользоваться printstr SS to file FF и заремить буферизацию, то время получается такое:
Elapsed time: 0.0.0 0:4:10
 
То есть в 8 раз медленнее.  
 
В обоих случаях файлы получаются идентичные, размером по 24 метра.
 
Замеры производились на 64x сервере под W7, Intel i7, хард SSD. Полагаю, что на крутящемся диске выигрыш будет еще заметнее.  
 
Ну и последнее. Чтобы произвести замеры времени, пришлось изобрести ПП [:TIMER] и [:TIMEDCD] о котороых напишу в другой веточке.
« Изменён в : 19.12.16 в 03:26:24 пользователем: Vladimir » Зарегистрирован

С уважением,
Владимир
Страниц: 1  Ответить | Уведомлять | Послать Тему | Печатать

« Предыдущая Тема | Следующая Тема »

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