On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 2517
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.12.12 14:01. Заголовок: Как сделать многопотоковую проверку Базы ?


Есть ряд задач (переодически возникающих) на которые тратиться много времени.
Может быть я и не прав.

Вот например:
база 20 тыс.записей, каждую запись нужно пройти и проверить заполнение полей, если не заполнено - ошибку в тхт-файл.

Все (наверно) делают последовательную обработку, т.е. проверяем базу с 1 по N-запись..
А можно же через потоки сделать ?

Подскажите как примерно это можно сделать для хХарбора ?
Заранее спасибо..




Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 78 , стр: 1 2 3 4 All [только новые]


moderator


Пост N: 548
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.02.13 10:49. Заголовок: А в чем, собственно,..


А в чем, собственно, проблема ? Запускаем поток, открываем в нем базу и проверяем, примерно так:

 цитата:
...
hb_threadDetach( hb_threadStart( @TestBase() ) )
...
Function TestBase()
use mybase shared new
do while !Eof()
if ...
...
endif
skip
enddo
Return Nil



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2630
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.02.13 12:32. Заголовок: alkresin пишет: А в..


alkresin пишет:

 цитата:
А в чем, собственно, проблема ?



То что вы мне предлагаете, это ОПЯТЬ ПОСЛЕДОВАТЕЛЬНАЯ проверка базы, только в фоновом потоке.
Правильно ?

А я хочу МНОГОПОТОЧНУЮ проверку базы... Может я неправильно выражаюсь, тогда извините меня.
Я хочу чтобы ну допустим 30-40 потоков проверили базу, причем каждый поток проверял свои записи, а уже проверенные не трогал...
Т.е. количество записей делим на количество потоков и каждый поток проверяет СВОИ записи.
Вот примерно так хочу ускорить проверку....
Как такое можно реализовать ?
Будет ли выигрыш по времени ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 32
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 06.02.13 12:37. Заголовок: Обработку записей ба..


Обработку записей базы я делаю через dbeval(), работает в десятки раз быстрее. А перебирать по записи, по моему, нерационально.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 549
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.02.13 12:59. Заголовок: Andrey пишет: Я хоч..


Andrey пишет:

 цитата:
Я хочу чтобы ну допустим 30-40 потоков проверили базу, причем каждый поток проверял свои записи, а уже проверенные не трогал...


Ну тогда вот так:

 цитата:
...
hb_threadDetach( hb_threadStart( @TestBase() ),1,5000 )
hb_threadDetach( hb_threadStart( @TestBase() ),5001,10000 )
hb_threadDetach( hb_threadStart( @TestBase() ),10001,15000 )
hb_threadDetach( hb_threadStart( @TestBase() ),15001,20000 )
...
Function TestBase( nRec1, nRec2 )
use mybase shared new
go to nrec1
do while !Eof() .and. Recno()<=nRec2
if ...
...
endif
skip
enddo
Return Nil


Если будете результаты писать в один текстовый файл, то операцию записи надо mutex'ом синхронизировать ( hb_mutexLock() ... hb_mutexUnLock() )

 цитата:
Будет ли выигрыш по времени ?


Может быть :).
a_sidorov пишет:

 цитата:
Обработку записей базы я делаю через dbeval(), работает в десятки раз быстрее


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2631
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.02.13 14:37. Заголовок: alkresin пишет: Есл..


alkresin пишет:

 цитата:
Если будете результаты писать в один текстовый файл, то операцию записи надо mutex'ом синхронизировать ( hb_mutexLock() ... hb_mutexUnLock() )



А можно чуть подробнее....
Допустим:
Function Main()
.....
cErrorFile := "myerror.log"
.....
hb_threadDetach( hb_threadStart( @TestBase() ),1,5000, cErrorFile)
hb_threadDetach( hb_threadStart( @TestBase() ),5001,10000, cErrorFile )
hb_threadDetach( hb_threadStart( @TestBase() ),10001,15000, cErrorFile )
hb_threadDetach( hb_threadStart( @TestBase() ),15001,20000, cErrorFile )
...
Function TestBase( nRec1, nRec2, cErrorFile )
LOCAL cError:=""
use mybase shared new
go to nrec1
do while !Eof() .and. Recno()<=nRec2
if ...
...
// если ошибка, то добавляем в строку сError += "Error ...."+CRLF
endif
skip
enddo
// --- здесь будет запись в cErrorFile... строки cError !
// Как сделать ?
Return Nil


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 550
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.02.13 14:55. Заголовок: Где-то в начале прог..


Где-то в начале программы:

static mutex1

Затем, перед запуском потоков:

mutex1 := hb_mutexCreate()

Ну и в TestBase():

hb_mutexLock( mutex1 )
// --- здесь будет запись в cErrorFile... строки cError !
hb_mutexUnLock( mutex1 )



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2632
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.02.13 14:59. Заголовок: СПАСИБО БОЛЬШОЕ ! :..


СПАСИБО БОЛЬШОЕ !
Буду пробовать...


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2616
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.02.13 15:06. Заголовок: Andrey пишет: Буду ..


Andrey пишет:

 цитата:
Буду пробовать...


Поведай нам потом есть ли выигрыш по скорости. Что то мне кажется если он и будет то будет не существенный.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2633
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.02.13 19:11. Заголовок: Dima пишет: Поведай..


Dima пишет:

 цитата:
Поведай нам потом есть ли выигрыш по скорости.


Обязательно !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2634
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.02.13 14:45. Заголовок: alkresin пишет на ht..


alkresin пишет на http://kresin.belgorod.su/rus/hrbfaq.html#Doc11:

 цитата:
Другие примеры многопоточных программ вы можете найти в harbour/tests/mt.


А для хХарбора где можно найти функции и примеры ?
Я пока на хХарборе сижу....

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 713
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 08.02.13 15:34. Заголовок: Andrey пишет: А для..


Andrey пишет:

 цитата:
А для хХарбора где можно найти функции и примеры ?

в папке tests/mt*.prg

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2642
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.02.13 00:54. Заголовок: Сделал пока однопото..


Сделал пока однопотоковый тест проверки базы и понял где "тормоза" можно убрать.

При проверке базы, если ошибка, то я использую CT-функцию:
STRFILE( "Ошибка ... такая то...", cFileError, .T.)
Да еще и в цикле проверки. Если её убрать, то проверка просто "влет" ускоряется....
Может ошибки писать в массив, а потом сбрасывать на диск ?
Нужно ли заменить STRFILE() и чем ?

Народ, подскажите как вы создаете текстовые журналы-ошибок для пользователя ?



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 826
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 10.02.13 09:32. Заголовок: Вот как раз отдельны..


Вот как раз отдельный поток мог бы делать журналирование, имхо.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2645
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.02.13 14:33. Заголовок: Народ, помогите прот..


Народ, помогите протестировать мою тестовую программу.
А потом пришлите log-файл теста: dBase2test.log
У меня комп слишком шустрый для таких тестов... Скрытый текст

Это тест на 30000 записей, можно поставить и 70000 (есть такие клиенты).
Конечно же реально кол-во ошибок в журналах меньше чем сейчас создается в тесте...

Исходник и сама программа здесь - http://files.mail.ru/5A8E598290604D31955459BEFBDF3FD3
Какие будут рекомендации для ускорения работы этой программы для ОДНОПОТОКОВОЙ работы для локальной программы ?
Для сетевой задачи журнал-ошибок нужно наверно все таки писать на локальную станцию...


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 79
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 10.02.13 22:14. Заголовок: Для сетевой работы ж..


Для сетевой работы журнал лучше писать в dbf файл ИМХО конечно. А если в DBF завести последнее поле длиной 2 символа и туда писать chr(13)+ chr(10) и отформатировать выводимую запись, то такую БД можно будет просматривать любым редактором. За исключением абракадабры в заголовке DBFинфорация будет вполне читаема и без специальных программ типа DBU

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2647
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 00:06. Заголовок: nick_mi пишет: За и..


nick_mi пишет:

 цитата:
За исключением абракадабры в заголовке DBFинфорация будет вполне читаема и без специальных программ типа DBU


Это пользователь будет читать ? Как ты ему это объяснишь ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 80
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 11.02.13 09:17. Заголовок: Ну если вопрос стоит..


Ну если вопрос стоит о том, чтобы смотрел пользователь, значит для него простенькую программу просмотра, а если
уж очень влом писать программу просмотра или журнал вообще предназначен в первую очередь тебе для разборок полетов, в первую запись базы вносишь данные
CHR(13) + CHR(10) + "***ЖУРНАЛ РАБОТЫ***" + CHR(13) + CHR(10) .
А пользователю объясняешь:
Все что до того - служебная информация, а ниже того - для пользовательского внимания

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 117
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.02.13 10:27. Заголовок: Andrey пишет:Какие б..


Andrey пишет:
 цитата:
Какие будут рекомендации


Может вот так Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2648
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 12:56. Заголовок: Да вопрос то по друг..


Да вопрос то по другому стоит:
Какие будут рекомендации для ускорения работы этой программы для ОДНОПОТОКОВОЙ работы для локальной программы ?

В чем разница по скорости записи:
1) CT-функции STRFILE()
2) Или то что предлагает nick_mi nick_mi пишет:

 цитата:
Для сетевой работы журнал лучше писать в dbf файл ИМХО конечно.




Запись в DBF это 2 операции: APPEND BLANK и запись в поле
STRFILE() наверно 4... (Я не знаток) открыть файл, указатель файла в конец файла, запись в файл, закрыть файл.
Самые МЕДЛЕННЫЕ операции - это: открытие и закрытие файлов...
Но тогда я сам могу создать функцию записи в журнал. Один раз его открыть в начале, потом писать в него (2 операции, указатель в конец файла и запись строки) и в конце проверки - закрыть файл.
Будет наверно быстрее....

Народ, помогите протестировать мою тестовую программу. Ссылка вверху !

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 81
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 11.02.13 13:07. Заголовок: An example of measu..


An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Intel(R) Pentium(R) CPU G645 @ 2.90GHz [~2894 MHz]
Free RAM: 1 298 096
OS: Windows XP Professional 5.01.2600 Service Pack 3
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 03 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 02 seconds
Second test base - 00 hour 00 minute 05 seconds
Third test base - 00 hour 00 minute 02 seconds
Fourth test base - 00 hour 00 minute 08 seconds

The total test time ---> 00 hour 00 minute 21 seconds


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 118
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.02.13 13:38. Заголовок: An example of measu..


An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Genuine Intel(R) CPU T2130@ 1.86GHz [~1867 MHz]
Free RAM: 1 387 068
OS: Windows Windows Vista Home Edition 6.01.7601 Service Pack 1
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 19 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 16 seconds
Second test base - 00 hour 02 minute 30 seconds
Third test base - 00 hour 00 minute 10 seconds
Fourth test base - 00 hour 03 minute 55 seconds

The total test time ---> 00 hour 07 minute 12 seconds

Andrey пишет:
 цитата:
Но тогда я сам могу создать функцию записи в журнал. Один раз его открыть в начале, потом писать в него (2 операции, указатель в конец файла и запись строки) и в конце проверки - закрыть файл.


В моем примере (на классах так и сделано). Тексты выдернул из реальной проги MiniGUI, адаптировать к xHb - не должно составить труда. Вывод поколоночно с разделителем chr(9) в файлы log и err. Если что то не понятно - спрашивай. Сам работаю так: log файлы локально (имена рабочее место или имя (код) usera). Просмотр редактором. Если надо объединять, то через copy на сервер или иначе. Если просмотр через Browse - тогда конечно dbf.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2618
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 16:36. Заголовок: У меня вот такой рез..


У меня вот такой результат. Просто жесть (Исходник не смотрел)

An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz [~3011 MHz]
Free RAM: 932 676
OS: Windows XP Professional 5.01.2600 Service Pack 2
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 09 seconds ( Recno: 30000 )
First test base - 00 hour 09 minute 37 seconds
Second test base - Оборвал через 1 час на 30 %


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2619
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 17:18. Заголовок: Тот же тест на Clipp..


Тот же тест на Clipper (First test base) 5 секунд
-//- Harbour -//- порядка 9 минут

Тормоз в STRFILE (Harbour)

Намного быстрее если результат писать в базу. Можно сразу или писать в начале в массив а потом в базу [Проверил]
А можно еще проще используя Alternate файлик вместо STRFILE , работает быстро.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 164
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 11.02.13 17:39. Заголовок: An example of measu..


An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Pentium(R) Dual-CoreCPUE5700@ 3.00GHz [~3000 MHz]
Free RAM: 2 097 151
OS: Windows XP Professional 5.01.2600 Service Pack 3
Development: xHarbour 1.2.3 Intl. (SimpLex) (Build 20121213) - Open Watcom C 12.90 (32 bit)
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 05 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 01 seconds
Second test base - 00 hour 00 minute 04 seconds
Third test base - 00 hour 00 minute 01 seconds
Fourth test base - 00 hour 00 minute 05 seconds

The total test time ---> 00 hour 00 minute 17 seconds

***********************************
An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Pentium(R) Dual-CoreCPUE5700@ 3.00GHz [~3000 MHz]
Free RAM: 2 097 151
OS: Windows XP 5.1.2600 Service Pack 3
Development: Harbour 3.2.0dev (Rev. 18748) - Open Watcom C 12.90 (32-bit)
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 05 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 01 seconds
Second test base - 00 hour 00 minute 04 seconds
Third test base - 00 hour 00 minute 00 seconds
Fourth test base - 00 hour 00 minute 05 seconds

The total test time ---> 00 hour 00 minute 17 seconds

********************************
An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Pentium(R) Dual-CoreCPUE5700@ 3.00GHz [~3000 MHz]
Free RAM: 2 009 484
OS: Windows XP Professional 5.01.2600 Service Pack 3
Development: xHarbour 1.2.3 Intl. (SimpLex) (Build 20121213) - Borland C++ 5.8.2 (32 bit)
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 05 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 01 seconds
Second test base - 00 hour 00 minute 05 seconds
Third test base - 00 hour 00 minute 01 seconds
Fourth test base - 00 hour 00 minute 07 seconds

The total test time ---> 00 hour 00 minute 20 seconds

*************************

An example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Pentium(R) Dual-CoreCPUE5700@ 3.00GHz [~3000 MHz]
Free RAM: 2 029 332
OS: Windows XP 5.1.2600 Service Pack 3
Development: Harbour 3.2.0dev (Rev. 18748) - Borland C++ 5.8.2 (32-bit)
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 04 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 01 seconds
Second test base - 00 hour 00 minute 05 seconds
Third test base - 00 hour 00 minute 00 seconds
Fourth test base - 00 hour 00 minute 07 seconds

The total test time ---> 00 hour 00 minute 19 seconds


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2620
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 17:45. Заголовок: Dima пишет: First t..


Dima пишет:

 цитата:
First test base - 00 hour 09 minute 37 seconds



santy пишет:

 цитата:
First test base - 00 hour 00 minute 01 seconds



Фига себе разница.........

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 119
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.02.13 18:06. Заголовок: Андрей, глянул prg:..


Андрей, глянул prg: FUNCTION Third_Test_DBF(cFileError,cPOLE) добавьте:
 
LOCAL nPOLE, ; // позиция поля cPOLE в файле
nNNN, ; // позиция поля ABONENT->NNN в файле
nNN, ; // позиция поля ABONENT->NN в файле
nKCity, ; // позиция поля ABONENT->KCity в файле
nKStreet // позиция поля ABONENT->KStreet в файле
...
SELECT ABONENT
DbSetOrder(1)
nKolRecords := ORDKEYCOUNT()
nPOLE := FieldPos(cPOLE)
nNNN := FieldPos("NNN")
nNN := FieldPos("NN")
nKCity := FieldPos("KCity")
nKStreet := FieldPos("KStreet")
...
cNNN := FieldGet(nPOLE) // cNNN := ABONENT->&cPOLE
aYes := {}
DO WHILE cNNN == FieldGet(nPOLE) // ABONENT->&cPOLE
...
// заменить ABONENT->NNN на FieldGet(nNNN)
// заменить ABONENT->NN на FieldGet(nNN)
// и так далее
AADD( aYes, cStr ) // этот массив лишний, надо сразу вывод в cFileError
SKIP
ENDDO
IF LEN(aYes) > 1
...
AADD(aDimNNN, cStr ) // этот массив лишний, надо сразу вывод в cFileError
ENDIF
...

дальше по тексту, наверное, также поступить.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2649
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 21:11. Заголовок: Dima пишет: Тот же ..


Dima пишет:

 цитата:
Тот же тест на Clipper (First test base) 5 секунд
-//- Harbour -//- порядка 9 минут

Тормоз в STRFILE (Harbour)


Вот вот и я о том же... Клипер на многих вещах работает быстрее Харбора...
Взять бы тот же SET FILTER TO - там оптимизация есть, а в Харборе нет...
Переделал прогу на Харбор и успокоился... Ан нет нужно перепроверять !!!

Я понял, что нужно писать свой STRFILE() !

Dima пишет:

 цитата:
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz [~3011 MHz]
Free RAM: 932 676


Самая классная машина для тестирования !
А то наставили всякого нового железа (включая меня самого) и все, алгоритмы побоку... Типа и так сойдет...
А юзера страдают...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2650
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 21:20. Заголовок: SergKis пишет: DO W..


SergKis пишет:

 цитата:
DO WHILE cNNN == FieldGet(nPOLE) // ABONENT->&cPOLE
...
// заменить ABONENT->NNN на FieldGet(nNNN)
// заменить ABONENT->NN на FieldGet(nNN)


Понял, спасибо ! Это для ускорения.
SergKis пишет:

 цитата:
AADD( aYes, cStr ) // этот массив лишний, надо сразу вывод в cFileError
SKIP


Тогда получиться лишний вывод равный количеству повтора...
А операция создания массива aYes := {} и заполнения его - разве медленная ?
SergKis пишет:

 цитата:
IF LEN(aYes) > 1
...
AADD(aDimNNN, cStr ) // этот массив лишний, надо сразу вывод в cFileError
ENDIF


Я специально сделал вывод ОДНОГО значения повтора + перескок по базе на нужную запись минуя одинаковые:
nI := nI + LEN(aYes) - 1


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2621
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 21:20. Заголовок: Andrey пишет: Я пон..


Andrey пишет:

 цитата:
Я понял, что нужно писать свой STRFILE()


Ты выше то читал ?
Для этой задачи вполне покатит
Set cons off
Set alter on
Set Alter to твой файлик
,,,,,,,,,,,,,,,, твой код
? "что то пишем в твой файл"

close alter
set alter off


Ни когда не юзал что ли ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2651
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 21:21. Заголовок: santy пишет: Develo..


santy пишет:

 цитата:

Development: xHarbour 1.2.3 Intl. (SimpLex) (Build 20121213) - Open Watcom C 12.90 (32 bit)
The total test time ---> 00 hour 00 minute 17 seconds

Development: Harbour 3.2.0dev (Rev. 18748) - Open Watcom C 12.90 (32-bit)
The total test time ---> 00 hour 00 minute 17 seconds

Development: xHarbour 1.2.3 Intl. (SimpLex) (Build 20121213) - Borland C++ 5.8.2 (32 bit)
The total test time ---> 00 hour 00 minute 20 seconds

Development: Harbour 3.2.0dev (Rev. 18748) - Borland C++ 5.8.2 (32-bit)
The total test time ---> 00 hour 00 minute 19 seconds


Разница между: Harbour 3.2.0dev и xHarbour 1.2.3 вообще ни какая...

А мой тест ( xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1 ) сколько показывает ?

santy пишет:

 цитата:
Development: Harbour 3.2.0dev (Rev. 18748) - Open Watcom C 12.90 (32-bit)



А тест на 70000 записей попробуй сделать ?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2652
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 21:44. Заголовок: Dima пишет: Ни когд..


Dima пишет:

 цитата:
Ни когда не юзал что ли ?


Неа ... не юзал ...

А эти операторы быстрее будут:
hFile:=Fopen(cFileError,FO_WRITE)
.....
do while ...
......
FSEEK(hFile,0,FS_END)
Fwrite(hFile, cStream, LEN(cStream))
.....
enddo
......
FClose( hFile )



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2622
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 22:07. Заголовок: Andrey пишет: Неа ...


Andrey пишет:

 цитата:
Неа ... не юзал ...


Юзани ;)

Andrey пишет:

 цитата:
А эти операторы быстрее будут:
hFile:=Fopen(cFileError,FO_WRITE)
.....
do while ...
......
FSEEK(hFile,0,FS_END)
Fwrite(hFile, cStream, LEN(cStream))
.....
enddo
......
FClose( hFile )



Вот так будет быстрее на много порядков
Set alter on
Set alter to test.txt

.....
do while ...
......
? cStream
.....
enddo
......
close alter
set alter off


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2653
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 22:26. Заголовок: Dima пишет: Вот так..


Dima пишет:

 цитата:
Вот так будет быстрее на много порядков
Set alter on
Set alter to test.txt


Блин, а бегунок (проценты показа) тоже же будут в файл писаться (ударение на "а" ) !
Как там переключать то на экран/файл ?
Я уже забыл....

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2623
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 22:41. Заголовок: Andrey пишет: Блин,..


Andrey пишет:

 цитата:
Блин, а бегунок (проценты показа) тоже же будут в файл писаться (ударение на "а" ) !


НЕА ;)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2654
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.13 23:12. Заголовок: Вот блин поправил.....


Вот блин поправил.... И МНОГОПОТОЧНУЮ проверку в этом случае делать не надо ....
The second example of measuring the speed of processing database for [x]Harbour
---------------------------------------------------------------------------
CPU: Intel(R) Core(TM) i5-3570K CPU @ 3.40GHz [~3504 MHz]
Free RAM: 2 097 151
OS: Windows Windows Vista Professional 6.02.9200
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
---------------------------------------------------------------------------

Create/Open Test.dbf - 00 hour 00 minute 02 seconds ( Recno: 70000 )
First test base - 00 hour 00 minute 04 seconds
Second test base - 00 hour 00 minute 01 seconds
Third test base - 00 hour 00 minute 04 seconds
Fourth test base - 00 hour 00 minute 01 seconds
The total test time ---> 00 hour 00 minute 14 seconds

Предыдущая программа dBase2test.exe на этом же компе и с этой же базой:
The total test time ---> 00 hour 00 minute 32 seconds

Исходник и ехе-ник здесь - http://files.mail.ru/8842CDB5260248C8BB975F82D70C666E
Народ, проверьте у себя пожалуйста !



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2624
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 23:30. Заголовок: Andrey The second ..


Andrey

The second example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz [~3011 MHz]
Free RAM: 837 448
OS: Windows XP Professional 5.01.2600 Service Pack 2
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 00 seconds ( Recno: 30000 )
First test base - 00 hour 00 minute 06 seconds
Second test base - 00 hour 00 minute 03 seconds
Third test base - 00 hour 00 minute 06 seconds
Fourth test base - 00 hour 00 minute 04 seconds

The total test time ---> 00 hour 00 minute 20 seconds


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2625
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.13 23:39. Заголовок: Andrey пишет: И МНО..


Andrey пишет:

 цитата:
И МНОГОПОТОЧНУЮ проверку в этом случае делать не надо


Ихгде ты ее делал ? Ни в одном твоем примере ее нет.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2655
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.13 02:16. Заголовок: Dima пишет: Ихгде т..


Dima пишет:

 цитата:
Ихгде ты ее делал ? Ни в одном твоем примере ее нет.


Так я только собирался... Следующую проверку (тест) буду делать !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 120
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.02.13 10:09. Заголовок: The second example o..


The second example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Genuine Intel(R) CPU T2130@ 1.86GHz [~1867 MHz]
Free RAM: 1 362 460
OS: Windows Windows Vista Home Edition 6.01.7601 Service Pack 1
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 41 seconds ( Recno: 70000 )
First test base - 00 hour 00 minute 19 seconds
Second test base - 00 hour 00 minute 04 seconds
Third test base - 00 hour 00 minute 21 seconds
Fourth test base - 00 hour 00 minute 06 seconds

The total test time ---> 00 hour 01 minute 34 seconds

Andrey пишет:
 цитата:
А операция создания массива aYes := {} и заполнения его - разве медленная ?


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

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 165
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 12.02.13 11:12. Заголовок: The second example o..


The second example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Pentium(R) Dual-CoreCPUE5700@ 3.00GHz [~3000 MHz]
Free RAM: 2 097 151
OS: Windows XP Professional 5.01.2600 Service Pack 3
Development: xHarbour 1.2.3 Intl. (SimpLex) (Build 20121213) - Open Watcom C 12.90 (32 bit)
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 10 seconds ( Recno: 70000 )
First test base - 00 hour 00 minute 02 seconds
Second test base - 00 hour 00 minute 01 seconds
Third test base - 00 hour 00 minute 01 seconds
Fourth test base - 00 hour 00 minute 01 seconds

The total test time ---> 00 hour 00 minute 18 seconds


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2657
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.13 11:56. Заголовок: Dima пишет: CPU: In..


Dima пишет:

 цитата:
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz [~3011 MHz]
Free RAM: 837 448
OS: Windows XP Professional 5.01.2600 Service Pack 2
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
The total test time ---> 00 hour 00 minute 20 seconds


Даже на слабенькой машине теперь все летает !
Значит STRFILE() в Харборе - отстой....

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 555
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 12.02.13 13:41. Заголовок: Все в порядке с Strf..


Все в порядке с Strfile(), просто надо знать, в каких случаях ее использование целесообразно, а в каких - нет.
Она сначала проверяет, если файл с именем, которые вы ей передали, потом, в зависимости от результата, создает новый или открывает существующий, записывает туда строку и закрывает его. Делать это в цикле, естественно, крайне нерационально.

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2659
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.13 14:35. Заголовок: alkresin пишет: Дел..


alkresin пишет:

 цитата:
Делать это в цикле, естественно, крайне нерационально.


Сейчас согласен с этим.

А на Клипере все работало без "тормозов"...
Дима проверял.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2661
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.13 19:13. Заголовок: Вот нашел старичка -..


Вот нашел старичка - ноутбук Samsung R40. Неплохую скорость показывает....
The second example of measuring the speed of processing database for [x]Harbour
---------------------------------------------------------------------------
CPU: Intel(R) Celeron(R) M CPU410@ 1.46GHz [~1468 MHz]
Free RAM: 1 354 160
OS: Windows XP Home Edition 5.01.2600 Service Pack 3
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 14 seconds ( Recno: 70000 )
First test base - 00 hour 00 minute 11 seconds
Second test base - 00 hour 00 minute 03 seconds
Third test base - 00 hour 00 minute 09 seconds
Fourth test base - 00 hour 00 minute 04 seconds
The total test time ---> 00 hour 00 minute 43 seconds


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 07.02.13
ссылка на сообщение  Отправлено: 12.02.13 20:03. Заголовок: У меня Win8 Pro, а п..


У меня Win8 Pro, а прога выдает какую-то Vista ... Абидна, да!

The second example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Intel(R) Core(TM) i7-3610QM CPU @ 2.30GHz [~2296 MHz]
Free RAM: 2 752 236
OS: Windows Windows Vista Professional 6.02.9200
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 00 seconds ( Recno: 70000 )
First test base - 00 hour 00 minute 04 seconds
Second test base - 00 hour 00 minute 01 seconds
Third test base - 00 hour 00 minute 04 seconds
Fourth test base - 00 hour 00 minute 01 seconds

The total test time ---> 00 hour 00 minute 11 seconds


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2662
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.13 21:07. Заголовок: MTC пишет: У меня W..


MTC пишет:

 цитата:
У меня Win8 Pro, а прога выдает какую-то Vista ... Абидна, да!


Да у меня тоже самое выдает ....
CPU: Intel(R) Core(TM) i5-3570K CPU @ 3.40GHz [~3504 MHz]
OS: Windows Windows Vista Professional 6.02.9200


В хХарборе 1.2 и 1.0 нет функции определения для Win8 ...
А как самому написать/переделать в winos.prg я не знаю...


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 827
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 13.02.13 09:48. Заголовок: Андрей, думаю, что w..


Андрей, думаю, что исправление winos.prg тут не требуется. Может вместо функции OS() использовать, к примеру, OS_VersionInfo()?



Это, собственно, winos.prg: http://sourceforge.net/p/xharbour/code/9908/tree/trunk/xharbour/source/rtl/winos.prg
Там есть и 7-ка, и 8-ка... У Висты версия 6.0, у 7-ки - 6.1, у 8-ки - 6.2

update: мдаааа, чё-та OS_VersionInfo() тоже не хочет... Проще свою написать.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2663
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.02.13 11:28. Заголовок: PSP Спасибо БОЛЬШОЕ ..


PSP Спасибо БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 828
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 13.02.13 11:29. Заголовок: Не спеши... ))) Я та..


Не спеши... ))) Я там подправил сообщение. Проверь функцию.

update: Проверил в Харборе WIN_OSVersionInfo(). Нормально работает. WIN_OSVersionInfo()[ 2 ] на 7-ке выдало "1".

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2664
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.02.13 01:25. Заголовок: Вот сделал другой те..


Вот сделал другой тест (запись части полей из одной БД в другую), хоть немного нагружает машину.
---------------------------------------------------------------------------
CPU: Intel(R) Core(TM) i5-3570K CPU @ 3.40GHz [~3504 MHz]
Free RAM: 2 097 151
OS: Windows Windows Vista Professional 6.02.9200
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 04 seconds ( Recno: 2525/127500 )
Write test base - 00 hour 04 minute 06 seconds
The total test time ---> 00 hour 04 minute 11 seconds

Может его можно переделать в МНОГОПОТОЧНЫЙ ?

Исходник и прога здесь - http://files.mail.ru/FCA060C7F8654447B070A668070E4981

Пробую прогнать свой тест на реальных данных, почему то выходит порядка 30 минут ? Почему ???
Может из-за того что в ОБЩЕЙ системе (кроме одного этого теста) есть много других функций ?
Размер моей ОБЩЕЙ проги на хХарборе 5152 Кб (в памяти занимает 70,3 Мб, загрузка проца 3% ),
а тестового примера dBase5test.exe - 842752 байт (в памяти занимает 1,4 Мб, загрузка проца 30% ) ......
Странное несоответствие теста и реальной программы....

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 122
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.02.13 11:56. Заголовок: Andrey пишет:Может е..


Andrey пишет:
 цитата:
Может его можно переделать в МНОГОПОТОЧНЫЙ ?


Надо сначала его почистить - лишние перегонки данных по памяти убрать, а потом смотреть:
Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 123
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.02.13 12:34. Заголовок: SergKis пишет:Надо с..


SergKis пишет:
 цитата:
Надо сначала его почистить


Вдогонку. Возможно надо воспользоваться функциями, которые выкладывал Паша на сайте и использует их в DbEdit.prg (тексты в конце prg). Я говорю о dbGetValue(...) и dbPutValue(...).
// Получить значение поля как строка: 
// ---------------------------
// if FieldType(nPos) == "C"; xVal := FieldGet(nPos)
// else ; xVal := dbGetValue(nPos)
// endif
// -----------------------------
// Сохранить значение поля как строка:
// ---------------------------
// if FieldType(nPos) == "C"; FieldPut(nPos, xVal)
// else ; dbPutValue(nPos, xVal)
// endif
// -----------------------------
исключаются преобразования типов.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 124
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.02.13 12:55. Заголовок: Andrey насколько акт..


Andrey насколько актуально DBCOMMIT() после кажной записи, а не через 10 или 100 ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2665
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.02.13 13:25. Заголовок: SergKis пишет: nKCi..


SergKis пишет:

 цитата:
nKCity := FieldPos("KCity") // вынести сюда или в начале prg файла перечислите все поля dbf
nKStreet := FieldPos("KStreet") // FIELD KCity,KSteet,FIO,NNN,NN... и используйте их без Alias-> и FIELD->// для тек. alias


Насколько это актуально ? Можно ли обойтись без этого ?
А то код непривычно читать .... Если нельзя, то будем привыкать...

SergKis пишет:

 цитата:
FSeek( nHandle, 0, FS_END ) // это зачем ? таких мест несколько


А при такой записи в файл, указатель ВСЕГДА остается в конце файла ?
Я просто не знаю.

SergKis пишет:

 цитата:
насколько актуально DBCOMMIT() после кажной записи, а не через 10 или 100 ?


Вообще не актуально... Ваши рекомендации ?

Насчет остального понял. Спасибо БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 125
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.02.13 14:08. Заголовок: Andrey пишет:А то ко..


Andrey пишет:
 цитата:
А то код непривычно читать ....


 
aAbn := array(20)
aAbn[1] := {"KCity" , 0, 0, NIL}
aAbn[2] := {"KStreet", 0, 0, NIL}
...
sele DOGOVOR
AEval(aAbn, {|a,n| a[ 3 ] := FieldPos(a[ 1 ])})

sele ABONENT
AEval(aAbn, {|a,n| a[ 2 ] := FieldPos(a[ 1 ])})
...
FOR i := 1 TO nKolRecords
...
sele ABONENT
AEval(aAbn, {|a,n| a[ 4 ] := FieldGet(a[ 2 ])})
...
sele DOGOVOR
AEval(aAbn, {|a,n| FieldPut(a[ 3 ], a[ 4 ])})
...
на мой взгляд, кратко и понятно.

Если другого exe-шника нет подключенного к базе - DBCOMMIT() перед закрытием табл., иначе надо смотреть как быстро измененные данные должны попадать на диск.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2667
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.02.13 14:45. Заголовок: Andrey пишет: Стран..


Andrey пишет:

 цитата:
Странное несоответствие теста и реальной программы


Разобрался я в этой ситуации... Я тестировал прогу на одном компе но на разных винчестерах: SSD и обычном.
Если база располагается на SSD - то загрузка проца возрастает и
тест-dBase5test.exe проходит в 14,5 раз быстрее !
dBase5test.exe - размер файла 842752 байт, программа в памяти занимает 1,3 - 1,6 Мб
Две тестовые базы - Recno: 2525/127500
На SSD HDD загрузка проца 30% - время счета 04 minute 11 seconds
На обычном HDD загрузка проца 1,6% - время счета 59 minute 58 seconds
Вот такие результаты...


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2626
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.02.13 14:49. Заголовок: Andrey пишет: Если ..


Andrey пишет:

 цитата:
Если база располагается на SSD - то загрузка проца возрастает и
тест-dBase5test.exe проходит в 14,5 раз быстрее !


Ты еще на RAM диске запусти , будет еще быстрее ;) Ориентироваться надо на обычные HDD.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 33
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 14.02.13 14:57. Заголовок: Похоже дело в DBCOMM..


Похоже дело в DBCOMMIT() на каждой записи, если вынести его за цикл, то время уменьшается в несколько десятков раз

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2668
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.02.13 14:57. Заголовок: Dima пишет: Ты еще ..


Dima пишет:

 цитата:
Ты еще на RAM диске запусти


Да забыл...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2670
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.02.13 18:00. Заголовок: Вот прислал мне a_si..


Вот прислал мне a_sidorov модифицированную программу. Спасибо БОЛЬШОЕ !
Это то что нужно... Главное понимать что и когда делать...

По производительности, предыдущий тест:
CPU: Intel(R) Core(TM) i5-3570K CPU @ 3.40GHz [~3504 MHz]
Free RAM: 2 097 151
OS: Windows Windows Vista Professional 6.02.9200
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 00 seconds ( Recno: 2525/127500 )
Write test base - 00 hour 59 minute 59 seconds
The total test time ---> 00 hour 59 minute 59 seconds

Модифицированный тест, на этом же компе:
Create/Open Test.dbf - 00 hour 00 minute 00 seconds ( Recno: 2525/127500 )
Write test base - 00 hour 00 minute 08 seconds
The total test time ---> 00 hour 00 minute 08 seconds

Результат классный !!!
Жалко только опять примера нет на МНОГОПОТОКОВУЮ обработку базы....
Исходник и пример здесь - http://files.mail.ru/ADB643696C364CC983BE1BC5FE1B9D3F

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2627
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.02.13 18:53. Заголовок: Andrey пишет: Резул..


Andrey пишет:

 цитата:
Результат классный !!!



The third example of measuring the speed of processing database for [x]Harbour
Copyright 2013 Verchenko Andrey <verchenkoag@gmail.com> Russia, Dmitrov
---------------------------------------------------------------------------
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz [~3011 MHz]
Free RAM: 578 452
OS: Windows XP Professional 5.01.2600 Service Pack 2
Development: xHarbour build 1.0.0 Intl. (SimpLex) - Borland C++ 5.5.1
Multi Thread: No
---------------------------------------------------------------------------
Create/Open Test.dbf - 00 hour 00 minute 46 seconds ( Recno: 2525/127500 )
Write test base - 00 hour 01 minute 09 seconds

The total test time ---> 00 hour 01 minute 56 seconds


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2671
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.02.13 19:32. Заголовок: Dima пишет: CPU: In..


Dima пишет:

 цитата:
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz [~3011 MHz]
Free RAM: 578 452
OS: Windows XP Professional 5.01.2600 Service Pack 2


Значит у моих юзеров тоже будет летать ...
Спасибо Дима !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2628
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.02.13 22:22. Заголовок: Andrey пишет: Жалко..


Andrey пишет:

 цитата:
Жалко только опять примера нет на МНОГОПОТОКОВУЮ обработку базы....



ты сам ответил ;)

Andrey пишет:

 цитата:
Это то что нужно... Главное понимать что и когда делать..



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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2692
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.13 12:38. Заголовок: Dima пишет: Просто ..


Dima пишет:

 цитата:
Просто надо сделать оптимальный алгоритм.



Исправил (убрал DBCOMMIT) у себя в расчетах, вынес в конец обработки.
Перерасчет всех абонентов при 70000 абонентов вместо 1ч 20мин. стал занимать 17 минут....
А у других базы еще меньше...
Спасибо БОЛЬШОЕ ВСЕМ за помощь !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2726
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.03.13 23:19. Заголовок: PSP пишет: Не спеши..


PSP пишет:

 цитата:
Не спеши... ))) Я там подправил сообщение. Проверь функцию.

update: Проверил в Харборе WIN_OSVersionInfo(). Нормально работает. WIN_OSVersionInfo()[ 2 ] на 7-ке выдало "1".



Беру winos.prg из хХарбора 1.2.3 SVN, вставляю в свой проект на 1.2.1,
запрашиваю OS_ISWIN8() и получаю .F. (на своей Win8)
Как бы им туда сообщить....

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2672
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.03.13 00:02. Заголовок: Andrey пишет: Беру ..


Andrey пишет:

 цитата:
Беру winos.prg из хХарбора 1.2.3 SVN, вставляю в свой проект на 1.2.1,
запрашиваю OS_ISWIN8() и получаю .F. (на своей Win8)


Я бы пересобрал проект под 1.2.3 в этом случае если очень надо.
Голый номер брать исходники из новых версий и вставлять в старые версии как правило.
Хотя конечно что брать и куда вставлять ...смотреть надо

Andrey пишет:

 цитата:
Беру winos.prg из хХарбора 1.2.3 SVN, вставляю в свой проект на 1.2.1


Это почти тоже что вставить этот исходник ну скажем в хХарбор 1.0.0 и попытаться получить
положительный результат.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 842
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 05.03.13 08:47. Заголовок: Не знаю, как в хэХар..


Не знаю, как в хэХарборе, а в просто Харборе эти функции описаны в \contrib\hbwin\win_os.c
К примеру,
HB_FUNC( WIN_OSIS8 ) 
{
OSVERSIONINFO osvi;

getwinver( &osvi );
hb_retl( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 2 );
}


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2727
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.03.13 10:50. Заголовок: Dima да бесполезно п..


Dima да бесполезно пересобирать... смотри что там в исходнике написано:

PSP пишет:

 цитата:
Не знаю, как в хэХарборе


Там в исходнике winos.prg написано:

#pragma BEGINDUMP
#if defined(HB_OS_WIN) && (!defined(__RSXNT__)) && (!defined(__CYGWIN__))
...............
HB_FUNC( OS_ISWIN8 )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 2 );
}
#else
.............
HB_FUNC( OS_ISWIN8 )
{
hb_retl( 0 ) ;
}
#endif




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3228
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.02.14 18:58. Заголовок: Вот пример по делу, ..


Вот пример по делу, мультипотоковая индексация БД для Харбора (под хХарбор не делал).
Тема примера: возврат значений (переменные cResultError и nResultIndexFile) после выполнения потока.
Большое СПАСИБО alkresin !
Без него бы не сделал ! Может кому и пригодиться.
Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 139
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 06.02.14 09:21. Заголовок: Спасибо за пример Ан..


Спасибо за пример Андрей! Но в программе вкралась ошибка. По Невнимательности собрал программу без -mt и программа вылетела с ошибкой нет переменной CRLF. У тебя в программе определена
#define CLRF, и при правильной работе именно она используется, а при неправильной сборке задействована CRLF для формирования сообщения.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3229
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.02.14 16:33. Заголовок: nick_mi пишет: У те..


nick_mi пишет:

 цитата:
У тебя в программе определена
#define CLRF, и при правильной работе именно она используется,


Ну уж не досмотрел....

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 140
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 06.02.14 19:34. Заголовок: Бывает! ..


Бывает!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4324
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.06.15 14:28. Заголовок: Возвращаюсь опять к ..


Возвращаюсь опять к потокам.
Где считается база быстрей (или одинаково) в потоке или в основной программе ?
Т.е. создаю отдельный поток для расчёта по базе, а основную программу оставляю в ожидание окончания потока.
По времени как будет ? Одинаково или нет ?

И еще вопрос: можно ли в отдельном потоке создавать окна (МиниГуи), а после выполнения потока просто оставить не убитым.
Что будет ?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 5
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 01.07.15 08:28. Заголовок: Andrey пишет: Исхо..


Andrey пишет:

 цитата:

Исходник и сама программа здесь - http://files.mail.ru/5A8E598290604D31955459BEFBDF3FD3



Ошибка 404

... не могу скачать




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4335
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.07.15 09:16. Заголовок: Alex_Cher пишет: ....


Alex_Cher пишет:

 цитата:
.. не могу скачать


А какую программу скачиваете ? Я может убил её давно...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5006
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.07.15 13:35. Заголовок: Andrey пишет: Я мож..


Andrey пишет:

 цитата:
Я может убил её давно...


Так объем облака 100 Гб ....экономишь ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4338
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.07.15 13:53. Заголовок: Dima пишет: Так объ..


Dima пишет:

 цитата:
Так объем облака 100 Гб ....экономишь ?


Старые примеры иногда переделываю...

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 6
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 02.07.15 07:54. Заголовок: Dima пишет: Так объ..


Dima пишет:

 цитата:
Так объем облака 100 Гб ....экономишь ?



Нет мужики это я лохонулся ... тема интересная а сроки выкладки сообщения не посмотрел ...

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 78 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 169
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет