Page 1
Page 2
Page 3
This article was inspired by a recent
project, Pocket RDA. Pocket RDA provides remote data access
from the Pocket PC to any ADO compliant database. The results
were returned into a grid control, and could be saved or
copied to the clipboard.
In 'program'
testing, things looked great (don't they always!!), the
30 or so customer records returned quickly. (As we all know,
most 'programmer testing' is carried out with the same 10
records.) I was a bit more concerned with the performance
of 100 plus records, but decided it was probably network
load (software guys blame the hardware - hardware guys blame
the software!).
Then when I
got into 'real' testing with 2000 records plus, it crawled
to a standstill.
I was using
a progress bar, but it was too 'wide' to show exactly what
was going on, so I decided to add a display of a record
counter to the program. For the first 100 records or so,
the counter 'turned' so quickly you could not see it, but
then it started to really slow down, turning at approx 1
record per second. The grid was invisible to start with,
and just made visible at the end of the run. It looked like
the more records I added to the grid, the slower it got.
This led me to do some experimentation with the grid control,
and the following represents my conclusions.
This subject has been discussed on the
forums several times, and several ways to speed up the display
have been suggested:
1) Make the grid visible false, fill
it and then visible true. I was already doing this, so
not an option.
2) 'Page' the control, e.g. show
20 records. When the user scrolled down, use the scroll
event in conjunction with the toprow value to go to the
database for more records, i.e.
Private Sub grdRes_Scroll()
If grdRes.TopRow + 8 >= grdRes.Rows Then
If Not End_Of_File Then
grdRes.Visible = False
WaitCursor True
Get_Next_Records
End If
End If
End Sub
This worked, but I was not happy with
the results.
3) Use a different control, i.e. a
text box or a listview control. Maybe, but they could
be as slow, and were not exactly what I wanted, as I wanted
the user to be able to select a column from the grid,
and this would be impossible in a text box or a listview
(or would it?). I was also happy with a grid, as users
are used to data being presented that way.
Rather than mess with my code, I did
what all developers do, and with apologies to Walt, wrote
a 'Micky Mouse' to test my theories.
The idea was to have a grid control,
a text box and a listview, set up a loop to add 1000 lines
of 5 items in each, and then decide what to do next. The
form below shows the controls, and also a listbox, to display
the results of the timing.

Next Page