BUG: Poor Performance With Forms Containing Many ObjectsID: Q197510
|
Instantiating a form or container that contains many objects, may be much
slower in Visual FoxPro version 6.0 than in Visual FoxPro version 5.0.
If the form contains a pageframe with multiple pages, page activation may
be much slower in Visual FoxPro 6.0 than in Visual FoxPro 5.0.
Normally, this behavior does not manifest itself unless the form or
container instantiated contains at least several hundred objects.
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.
* This program creates a number of forms that each
* add a pageframe at run-time. Each page activates
* after the pageframe is instantiated. The number of forms,
* pages in the pageframe, and text boxes on each page
* are set from the #DEFINE statements. The times in seconds for
* each form to add its objects, and activate each page
* are echoed to the Debug Output window. The total time in
* seconds for all forms is echoed last.
#DEFINE NO_OF_FORMS 10
#DEFINE NO_OF_PAGES 20
#DEFINE NO_OF_TEXTBOXES 10
DEBUG
DEBUGOUT ''
PUBLIC gnStart
gnStart = SECONDS()
FOR lni = 1 TO NO_OF_FORMS
lcfrmName = 'oform'+ALLTR(STR(lni))
&lcfrmName = CREATEOBJECT('perfform')
&lcfrmName..CAPTION = SUBSTR(lcfrmName,2)
&lcfrmName..SHOW()
ENDFOR
FOR lnj = 1 TO _SCREEN.FORMCOUNT
lcfrmName = 'oform'+ALLTR(STR(lnj))
&lcfrmName..SHOW()
lnstart = SECONDS()
FOR lnk = 1 TO &lcfrmName..pf1.PAGECOUNT
&lcfrmName..pf1.ACTIVEPAGE = lnk
ENDFOR
DEBUGOUT 'Form '+ ALLTR(STR(lnj)) + ;
': '+alltr(str(SECONDS() - lnstart,5,2))
ENDFOR
DEBUGOUT 'All forms: '+alltr(str(SECONDS() - gnStart,5,2))
READ EVENTS
DEFINE CLASS perfform AS FORM
HEIGHT = 350
ADD OBJECT pf1 AS PAGEFRAME WITH ;
PAGECOUNT = 0
PROC pf1.INIT()
THIS.HEIGHT = THIS.PARENT.HEIGHT - 5
FOR lnj = 1 TO NO_OF_PAGES
THIS.ADDOBJECT('pg'+ALLTR(STR(lnj)), 'pg')
ENDFOR
ENDPROC
ENDDEFINE
DEFINE CLASS pg AS PAGE
PROC ACTIVATE()
IF TYPE('this.cntPage') # 'O'
THIS.ADDOBJECT("cntPage", "cnPageContainer")
ENDIF
ENDPROC
ENDDEFINE
DEFINE CLASS cnpagecontainer AS CONTAINER
NAME = "cnpagecontainer"
VISIBLE = .T.
Top = 5
ADD OBJECT cmd1 AS COMMANDBUTTON WITH ;
LEFT = 180, ;
TOP = 20, ;
CAPTION = 'Quit', ;
VISIBLE = .T.
PROC INIT()
THIS.HEIGHT = THIS.PARENT.PARENT.HEIGHT - 20
THIS.WIDTH = THIS.PARENT.PARENT.WIDTH - 5
FOR lnp = 1 TO NO_OF_TEXTBOXES
THIS.ADDOBJECT('lbl'+ALLTR(STR(lnp)), 'label')
WITH THIS.CONTROLS(lnp+1)
.LEFT = 10
.TOP = 25*(lnp-1)+ 2
.WIDTH = 80
.NAME = 'lbl'+ALLTR(STR(lnp))
.VISIBLE = .T.
ENDWITH
ENDFOR
FOR lnq = lnp TO (2 * lnp) - 2
THIS.ADDOBJECT('txt'+ALLTR(STR(lnq)), 'textbox')
WITH THIS.CONTROLS(lnq+1)
.HEIGHT = 23
.LEFT = 90
.TOP = 25*(lnq-lnp)+ 2
.WIDTH = 80
.NAME = 'txt'+ALLTR(STR(lnq))
.VISIBLE = .T.
ENDWITH
ENDFOR
ENDPROC
PROC cmd1.CLICK
gnStart = SECONDS()
CLEAR EVENTS
ENDPROC
ENDDEFINE
Additional query words: kbVFP6QFE
Keywords : kbOOP kbPerfMon kbVFp600bug kbVFP600QFE
Version : WINDOWS:6.0
Platform : WINDOWS
Issue type : kbbug
Last Reviewed: July 1, 1999