I am wondering if I need all the LIB in the link script. Can someone help and let me know if all the LIB below are ABSOLUTELY necessary? Can someone provide a list of CORE lib and then I can add the necessary LIB based on application requirements?
Whatever be the libs included in the link script, the linker includes only those modules (not entire library) containing the functions used by the application. So, removing a few libs or adding some more libs, even unwanted, to the link script does not change the size of the exe even by a single byte.
I have noticed that the EXE are over 1 MB larger than before.
There have been several improvements and additions which resulted in an increase of some library modules. Still, we will look into the internals of FWH libs and examine if it is possible to reduce the resultant application size.
I actually watched customer run application and load data (DBFCDX). The DBFs are very large but that has not been a problem until very recently. Our main purpose of the upgrade was to utilize XBROWSE and we had to remove XBROWSE because LISTBOX performed better with large DBFs.
You may recall that sometime back I advised you:
viewtopic.php?f=3&t=35592&p=211898&hilit=wbrowse#p211898Also, one more suggestion.
Unless there is a need to use some exclusive features of xbrowse, it may not be worth converting from listbox (wbrowse) to xbrowse. WBrowse is the fastest browse.
At the same time, since your experiences and observations may send wrong signals to other users, I am obliged to clarify some points about the comparative performance of wbrowse and xbrowse.
WBrowse is fast. It does not mean XBrowse is slow. Its speeds come quite close to that of WBrowse and in some cases much faster than WBrowse, if used the right way.
In addition, XBrowse comes with a plethora of great features not available in WBrowse.
We are talking about large DBFs. In real life, we would be accessing the table from a remote server. I made a test using "CUSTBIGM.DBF" containing 1,000,000 records. Every field is indexed. I ran the program from my desktop, accessing the DBF located on my laptop, connected over home WiFi, which is slower than a wired LAN used in office environment. Also, accessing data from a normal PC is slower than accessing from a file server.
This is the output of the program:
Navigation of XBrowse is as fast as WBrowse and scrolling is a lot faster than WBrowse. On a wired lan it should be faster and on local disk it should be flying.
You were talking about load times. Now we test with even a larger DBF. File size is 2.8 GB with more than 13 million records. Again accessing the DBF over WiFi network, this is the performance. You may see that the browse loads instantaneously.
Some points to be kept in mind: XBrowse mostly depends on the RDD functions OrdKeyCount(), OrdKeyNo() and OrdKeyGoTo(), which in turn depend on the indexes. So, very large index files, large index key values to some extent impede the performance of xbrowse when large DBFs are accessed remotely. We need to keep this in mind while building and using XBrowse.
XBrowse also has some incompatibilities with ADS for the same reasons. However, we can provide support where necessary.
Diego Decandia wrote:I may have the same problem as Darrell.
After going from 17.04 to 18.02, I provided an update to a customer and reported a significant slowdown in the application.
I do not have for now other info, nor ideas, since the update did not change any of the procedures that the customer has reported to me...
The impression is that the problem concerns do while loops, but it is difficult to be sure or to test changes from the customer.
The executable works locally, the DBF are on the server.
We are quite concerned. It is not easy to find the causes of such problems. We need your help and cooperation. Is the entire application is slow? or some parts are running slow? Can you identify and give some idea about what kind of interfaces are working slow?
Our own software, as well as my friend-programmers' software with their clients, are working well. I requested them to rebuild using 17.04 and compare at the users' sites. So far current version appears to work quite well.
We will get back when we notice some issues and in the meanwhile, we will be grateful if you can provide us some clearer clues.
Source Code of the above programs:
- Code: Select all Expand view
#include "fivewin.ch"
REQUEST DBFCDX
function BigDBF()
local oDlg, oFont, oBrw, oLbx
local nSecs, nRecNo := 1
local atags := {}
local cDbf := "\\GNRDELL\C\TESTS\DATA\CUSTBIGM.DBF"
SET DATE ITALIAN
SET CENTURY ON
SetGetColorFocus()
FWNumFormat( "A", .t. )
USE ( cDbf ) NEW SHARED ALIAS BIG1 VIA "DBFCDX"
USE ( cDbf ) NEW SHARED ALIAS BIG2 VIA "DBFCDX"
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
DEFINE DIALOG oDlg SIZE 1000,500 PIXEL TRUEPIXEL FONT oFont ;
TITLE NetName() + " using " + cDbf
@ 00,000 SAY "XBROWSE" SIZE 500,20 PIXEL OF oDlg CENTER COLOR CLR_HRED,oDlg:nClrPane
@ 00,500 SAY "WBROWSE" SIZE 500,20 PIXEL OF oDlg CENTER COLOR CLR_HRED,oDlg:nClrPane
@ 65, 20 XBROWSE oBrw SIZE 470,-20 PIXEL OF oDlg ;
ALIAS "BIG1" COLUMNS "ID","FIRST", "CITY", "SALARY" ;
COLSIZES 70,120,120,90 ;
CELL LINES NOBORDER FOOTERS AUTOSORT
WITH OBJECT oBrw
:nEditTypes := EDIT_GET
:lFastDraw := .t.
:bKeyCount := { || BIG1->( LASTREC() ) }
:bKeyNo := <|n|
if n != nil
//( oBrw:cAlias )->( OrdKeyRelPos( n / oBrw:nLen ) )
( oBrw:cAlias )->( OrdKeyGoTo( n ) )
endif
n := ( oBrw:cAlias )->( OrdKeyRelPos() ) * oBrw:nLen
return n
>
:bKeyNo := { |n| If( n != nil, ( oBrw:cAlias )->( OrdKeyGoTo( n ) ), nil ), ( oBrw:cAlias )->( OrdKeyRelPos() ) * oBrw:nLen }
:lHScroll := .f.
:bRecSelClick := { || BIG1->( OrdSetFocus( 0 ) ), oBrw:cOrders := "", oBrw:Refresh(), oBrw:SetFocus() }
:aCols[ 1 ]:cFooter := TRANSFORM( BIG1->(LASTREC()), "9,999,999" )
:CreateFromCode()
END
@ 65,510 LISTBOX oLbx FIELDS TRANSFORM( FIELD->ID,"9,999,999" ), ;
FIELD->FIRST, FIELD->CITY,;
TRANSFORM( FIELD->SALARY, "999,999.99" ) ;
ALIAS "BIG2" ;
HEADERS "ID","FIRST","LAST","SALARY" ;
COLSIZES 70,120,120,90 ;
SIZE 470,415 PIXEL OF oDlg FONT oFont
oLbx:aJustify := { .t., .f., .f., .t. }
oLbx:aFooters := { TRANSFORM( BIG2->( LASTREC() ), "9,999,999" ), "", "", "" }
@ 25,044 GET nRecNo PICTURE "999999" SIZE 70,24 PIXEL OF oDlg RIGHT ;
VALID ( BIG1->(DBGOTO(nRecNo)), oBrw:SetFocus(), .t. )
@ 25,320 BTNBMP PROMPT "TOP" SIZE 80,30 PIXEL OF oDlg FLAT ACTION ( oBrw:GoTop(), oBrw:SetFocus() )
@ 25,410 BTNBMP PROMPT "BOTTOM" SIZE 80,30 PIXEL OF oDlg FLAT ACTION ( oBrw:GoBottom(), oBrw:SetFocus() )
@ 25,510 GET nRecNo PICTURE "999999" SIZE 70,24 PIXEL OF oDlg RIGHT ;
VALID ( BIG2->(DBGOTO(nRecNo)), oLbx:Refresh(), oLbx:SetFocus(), .t. )
@ 25,810 BTNBMP PROMPT "TOP" SIZE 80,30 PIXEL OF oDlg FLAT ACTION ( oLbx:GoTop(), oLbx:SetFocus() )
@ 25,900 BTNBMP PROMPT "BOTTOM" SIZE 80,30 PIXEL OF oDlg FLAT ACTION ( oLbx:GoBottom(), oLbx:SetFocus() )
oDlg:bLClicked := { || CursorWait(), BIG2->( OrdSetFocus( "CITY" ) ), oLBX:Refresh() }
oDlg:bRClicked := { || CursorWait(), BIG1->( OrdSetFocus( "CITY" ) ), /*MsgInfo( "sorted" ),*/ oBrw:Refresh() }
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
return nil
- Code: Select all Expand view
#include "fivewin.ch"
REQUEST DBFCDX
function Main()
local cDbf := "\\GNRDELL\C\TESTS\DATA\CUST2GB.DBF"
local cSize := TRANSFORM( FSIZE( cDbf ), "999,999,999,999" ) + " Bytes"
local cRecs
SET DATE ITALIAN
SET CENTURY ON
FWNumFormat( "A", .t. )
? "START"
USE (cDbf) NEW SHARED VIA "DBFCDX"
cRecs := TRANSFORM( LASTREC(), "999,999,999" ) + " Records "
XBROWSER Alias() TITLE NetName() + " using " + cDbf + " with " + cRecs + cSize ;
SETUP ( oBrw:aCols[ 1 ]:cEditPicture := "99,999,999", oBrw:aCols[ 1 ]:nWidth := 100 )
return nil