FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Speedtest CLIPPER vs. xHarbour - COMMIT
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Speedtest CLIPPER vs. xHarbour - COMMIT
Posted: Fri Apr 30, 2021 11:52 AM
Can someone explain this command to me? Thanks.

Code (fw): Select all Collapse
   set( _SET_HARDCOMMIT, .F. )


Regards.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Speedtest CLIPPER vs. xHarbour - COMMIT
Posted: Fri Apr 30, 2021 12:07 PM
Joao,

https://harbour.harbour-project.narkive.com/9YO3sx4r/speedtest-clipper-vs-xharbour-commit

dbCommit() make two things:
1. write application memory buffers to file.
2. send to OS request to flush disk buffers releated to open file.

The 1-st action is executed also by any other rdd operation which
may cause record reloading or may need to synchronize modifications,
f.e. unlock. You can simulate it in many different ways, f.e. by skip(0).

The 2-nd action is unique to dbcommit and it's not necessary for any
synchronizations in simultaneous/concurrent/network access. The whole
job here is sending information to Operating System which is automatically
redirected if necessary by OS to File Server that we ask to flush OS or
FS disk I/O write buffers physically to disk. OS / FS can ignore our request,
can execute it immediately or can only mark that it should be done
in some nearest future. It's in practice out of programmer control and
does not have to be.
In [x]Harbour you can disable this part of dbCommit() by:
set( _SET_HARDCOMMIT, .F. )
In COMIX by:
cmxSys( 1002, .f. )
As I said it does not cause any interactions to concurrent access.
Try to add set( _SET_HARDCOMMIT, .F. ) to above code and check the results.
Then write a message to your OS / network client / file server authors
and ask why COMMIT request executed from DOS application makes sth different
then executed from real Windows application. Of course if you need such
information. Probably DOS emulation layer buffers few commit requests in
some short time period, f.e. 1 sec. and then send them as one. But I only
guess. Anyhow it's not Harbour problem. Harbour only sends commit request
for open file handle to the OS and this is single function call inside
each user dbCommit() if _SET_HARDCOMMIT is not disabled. All time overhead
if any is out of Harbour code.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Speedtest CLIPPER vs. xHarbour - COMMIT
Posted: Fri Apr 30, 2021 01:20 PM
Gracias Maestro. Viviendo y aprendiendo.

Code (fw): Select all Collapse
   HB_LANGSELECT( 'PT' )     // Default language is now Portuguese
   HB_SETCODEPAGE( "PT850" )

   RDDSETDEFAULT("DBFCDX")
   RDDREGISTER( "DBFCDX", 1 ) // RDT_FULL

   SET AUTOPEN OFF
   SET CENTURY ON
   SET DATE BRITISH
   SET TIME FORMAT TO "HH:MM:SS"
   SET EPOCH TO YEAR( DATE() ) - 30
   SET SOFTSEEK OFF
   SET WRAP ON
   SETCANCEL( .F. )
   SET CONFIRM OFF
   SET DELETED ON
   SET _3DLOOK ON
   SET UNIQUE OFF
   SET ESCAPE OFF
   SET EXACT ON  
   SET EXCLUSIVE OFF
   SET MULTIPLE OFF
   // SET( _SET_HARDCOMMIT, .F. )
   SET HARDCOMMIT OFF  // Asi, és mejor.
   SET OPTIMIZE ON


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: Speedtest CLIPPER vs. xHarbour - COMMIT
Posted: Fri Apr 30, 2021 02:45 PM

To All

I still contend that when when you finish adding or editing a record in a .dbf .. a simple Goto Recno() is just as good as dbCommit() .. because you are moving the record pointer which flushes the buffers ...

Rick Lipkin

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Speedtest CLIPPER vs. xHarbour - COMMIT
Posted: Fri Apr 30, 2021 03:55 PM
Rick Lipkin wrote:To All

I still contend that when when you finish adding or editing a record in a .dbf .. a simple Goto Recno() is just as good as dbCommit() .. because you are moving the record pointer which flushes the buffers ...

Rick Lipkin


Sorry. I do not agree.

https://vivaclipper.wordpress.com/2014/01/17/dbcommit/

https://vivaclipper.wordpress.com/2014/03/15/hb_frecno/

https://vivaclipper.wordpress.com/?s=RECNO%28%29

dbCommit (), Forces Windows to record data in the field in case of a power failure, for example.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Speedtest CLIPPER vs. xHarbour - COMMIT
Posted: Fri Apr 30, 2021 04:42 PM
karinha wrote:dbCommit (), Forces Windows to record data in the field in case of a power failure, for example.


I agree.

EMG

Continue the discussion