Форум » [x]Harbour » Копирование открытых баз данных » Ответить

Копирование открытых баз данных

Dima: Имею непонятку. Cтал в последнее время замечать что скорость копирования базы а она на данный момент весит 10 гиг , стало занимать до ~15 минут , хотя пару недель назад это время было всего ~32 секунды. Провел эксперимент , в базах ни кого нет , время копирования базы заняло ~32 секунды , зашел в прогу и перешел в раздел где открывается много баз и снова запустил копирование , цирк ...время заняло ~ 33 секунды и ни какими минутами и не пахнет. Копирую базы так [pre2] FOR EACH aFile IN aDir hb_DynCall({ "CopyFileA", "kernel32.dll", HB_DYN_CALLCONV_STDCALL },pathbase+"dbf\"+afile[1],pathbase+"zip\"+afile[1],0) hb_releaseCPU() Next [/pre2] Винт SSD и ему почти 2 года. Не пойму куда копать ....есть какие мысли у кого ?

Ответов - 84, стр: 1 2 3 4 5 All

Dima: PSP пишет: Вот нечто https://www.cyberforum.ru/win-api/thread983172.html Почитал....хммм

Dima: Потестю ка у клиента еще раз но уже с Hb_fcopy

Dima: Да с Hb_fcopy время тоже растет при каждом цикле копирования. Файлы под 2 гига , но не все. Погуглил , проблема таки есть по любому , когда поток + копирование в цикле + большие файлы. Полагаю что то нужно добавить в цикл , вот только что , хз. Поэтому пока буду юзать костыль с перезапуском потока , реально работает. Паше. Странно не замечать проблемы и косить на другие происходящие процессы , аргументы выше и статистику я приводил.


Dima: Паша а не сложно тебе сделать обертку для CopyFileExA что бы можно было его запускать с флагом COPY_FILE_NO_BUFFERING , хочу с ней поиграться и посмотреть на результат.

Dima: и вот такую SHFileOperationA

Dima: Pasha Поможешь с вопросом ?

gfilatov2002: Dima пишет: вот такую SHFileOperationA Дима! Попробуй эту функцию из библиотеки hbwin: win_SHFileOperation( [<hWnd>], [<nFunction>], [<cFrom>|<aFrom>], [<cTo>|<aTo>], [<nFlags>], [<@lAnyOperationAborted>], [<aNameMappings>], [<cProgressTitle>] ) -> <nResult> Контрольный пример из поставки Харбора: [pre2]/* * * Copyright 2010 Viktor Szakats (vszakats.net/harbour) * */ #require "hbwin" #include "simpleio.ch" PROCEDURE Main() LOCAL a LOCAL lAbort LOCAL tmp ? "0x" + hb_NumToHex( win_SHFileOperation( NIL, WIN_FO_COPY, { __FILE__, "olesrv1.prg" }, { "testcopy1" }, ; NIL, @lAbort, ; NIL, "Harbour SHFile 1" ) ) ? lAbort hb_MemoWrit( "rename.txt", "hello1" ) hb_MemoWrit( "rename1.txt", "hello2" ) a := {} ? "0x" + hb_NumToHex( win_SHFileOperation( NIL, WIN_FO_RENAME, { "rename.txt" }, { "rename1.txt" }, ; WIN_FOF_WANTMAPPINGHANDLE, @lAbort, ; a, "Harbour SHFile 2" ) ) ? lAbort FOR EACH tmp IN a ? tmp[ 1 ], tmp[ 2 ] FErase( tmp[ 1 ] ) FErase( tmp[ 2 ] ) NEXT FErase( "rename1.txt" ) ? "0x" + hb_NumToHex( win_SHFileOperation( NIL, WIN_FO_COPY, __FILE__ + Chr( 0 ) + "olesrv1.prg" + Chr( 0 ), "testcopy2", ; NIL, @lAbort, ; NIL, "Harbour SHFile 3" ) ) ? lAbort RETURN [/pre2]

Dima: gfilatov2002 пишет: Попробуй эту функцию из библиотеки hbwin: Спасибо , потестю , отпишу !

Pasha: #define COPY_FILE_NO_BUFFERING 0x00001000 proc main ? win_CopyFileEx('_cf.prg', '_cf1.prg', COPY_FILE_NO_BUFFERING) retu #pragma BEGINDUMP #include "hbapi.h" #include "windows.h" HB_FUNC( WIN_COPYFILEEX ) { hb_retl( (LONG) CopyFileEx( (LPCSTR) hb_parc(1), (LPCSTR) hb_parc(2), NULL, NULL, NULL, HB_ISNIL(3) ? 0 : (DWORD) hb_parnl(3) ) ); } #pragma ENDDUMP

Dima: Pasha gfilatov2002 Спасибо за помощь. Вопрос не решился. Поэтому перезапускаю поток если время копирования превысило N сек , работает.

Dima: Пора поюзать ROBOCOPY , интересно уже каков будет результат

PSP: Dima пишет: Пора поюзать ROBOCOPY А она умеет открытые файлы?

Dima: PSP пишет: А она умеет открытые файлы? Да , облом . не копирует открытые файлы и Xcopy тоже по ходу

Andrey: Dima пишет: Да , облом . не копирует открытые файлы и Xcopy тоже по ходу Делай тогда через Winrar или WinZip, они умеют делать архивы с открытыми файлами. Я сделал свою утилиту на МиниГуи, создаю нужный мне список файлов и делаю архив. Работает с 2013 года. Команда простая: [pre2] COMPRESS aFiles ; TO cBackupZip ; BLOCK { | cFile, nPos | ProgressUpdate( nPos, cFile, aSizeFiles, .T. ) } ; LEVEL LEVEL_ZIP ; PASSWORD cPass ; OVERWRITE ; STOREPATH ; FILEPROGRESS { | nPos, nTotal | ProgressFile( nPos, nTotal, .T. ) } ; RESULT lSuccess[/pre2]

Dima: Dima пишет: Да , облом . не копирует открытые файлы и Xcopy тоже по ходу Поправка Shared копирует , Exclusive нет

Dima: Прикольно на одном из серваков уже сделал 2 замера и время не растет , даже падает , при использовании Robocopy. Жду 2-го результата на втором серваке в другом городе. Update И на втором время не растет и тоже упало Приз получает Robocopy

Pasha: Dima пишет: Поправка Shared копирует , Exclusive нет Так работают все средства, хоть функции, хоть сторонние утилиты. На то оно и эксклюзив, что никому больше доступ к файлу не даст

PSP:

PSP: Pasha пишет: Так работают все средства, хоть функции, хоть сторонние утилиты. На то оно и эксклюзив, что никому больше доступ к файлу не даст Разрешите не согласиться. VSS с этим справляется. Она на другом уровне работает, не файловом.

Dima: Pasha пишет: Так работают все средства, хоть функции, хоть сторонние утилиты. На то оно и эксклюзив, что никому больше доступ к файлу не даст Да это я лоханулся в тестовом своем примере и написал что то типа Use nakl_r new и думал что оно в Shared по умолчанию открывается



полная версия страницы