How to Optimize Size and Speed of Visual Basic Applications
The information in this article applies to:
Microsoft Visual Basic Standard Edition for Windows 2.0 Microsoft Visual Basic Standard Edition for Windows 3.0 Microsoft Visual Basic Standard Edition for Windows 1.0 Microsoft Visual Basic Professional Edition for Windows 2.0 Microsoft Visual Basic Professional Edition for Windows 3.0 This article was previously published under Q73798 SUMMARY This article describes how to optimize Visual Basic applications for size and sp eed. It also provides examples for methods outlined in the "Visual Basic Program mer's Guide," chapter 11, "Optimizing Your Application for Size and Speed." For additional information on this subject, please see the following article(s) in the Microsoft Knowledge Base: 112860 How to Optimize Memory Management in VB 3.0 for Windows MORE INFORMATION Below are guidelines to help increase speed, available resources, available RAM, and available disk space in Visual Basic: INCREASING SPEED You can increase speed in the following ways: Preload forms. Store graphics as bitmaps. Place debug routines in a separate module. Use dynamic-link library (DLL) routines. Use integer and long variables instead of single, double, or currency variables. Cache frequently accessed properties in variables. Example #1: Demonstrating Integers Versus Single Variables in a Loop Start Visual Basic; or choose New Project from the File menu (ALT+ F, N) if Visu al Basic is already running. Form1 is created by default. Add two command buttons and two labels to Form1.FRM. Add the following two procedures to the (general) section of Form1. Sub Ints () Dim i As Integer i = 1 Do Until i >= 5000 ' = 5000 iterations label1.Caption = Str$(i) i = i + 1 DoEvents Loop End Sub Sub Reals () Dim r As Single r = 1# Do Until r <= 500 ' = 5000 iterations label2.Caption = Str$(r) r = r + .1 DoEvents Loop End Sub Add the following code in the Command1_Click event procedure: Sub Command1_Click () StartTime = Timer Call Ints EndTime = Timer MsgBox "Time for Integer Loop was: " & CStr(EndTime - StartTime) End Sub Add the following code in the Command2_Click event procedure: Sub Command2_Click () StartTime = Timer Call Reals EndTime = Timer MsgBox "Time for Real Loop was: " & CStr(EndTime - StartTime) End Sub Run the sample. First test how long it takes the integer loop to process, then t est how long it takes the single loop to process. You should see that the intege r loop runs faster. Example #2: Demonstrating Cached Properties in Variables Start Visual Basic; or choose New Project from the File menu (ALT+ F, N) if Visu al Basic is already running. Form1 is created by default. Add one text box and two command buttons to Form1.FRM. Add the following code in the Command1_Click event procedure: Sub Command1_Click () Open "datacons.txt" For Input As #1 ' Open test file. nl$ = Chr$(13) + Chr$(10) text1.Text = "" ' Clear the text box. StartTime = Timer Do Until EOF(1) ' Grab all data into text box. Line Input #1, tmp$ text1.Text = text1.Text + tmp$ + nl$ Loop EndTime = Timer Close #1 MsgBox "Time for Text Loop was: " & CStr(EndTime - StartTime) End Sub Add the following code in the Command2_Click event procedure: Sub Command2_Click () Dim buffer$ Open "datacons.txt" For Input As #1 ' Open test file. nl$ = Chr$(13) + Chr$(10) text1.Text = "" ' Clear the text box. StartTime = Timer Do Until EOF(1) ' Grab all data into text box. Line Input #1, tmp$ buffer$ = buffer$ + tmp$ + nl$ Loop text1.Text = buffer$ EndTime = Timer Close #1 MsgBox "Time for Buffered Loop was: " & CStr(EndTime - StartTime) End Sub Run the sample. First test how long it takes the text loop to process, then test how long it takes the buffered loop to process. The buffered loop should run mu ch faster. INCREASING DISPLAY SPEED AND APPARENT SPEED You can increase display speed and apparent speed in the following ways: Turn off the ClipControls property under certain circumstances. Use AutoRedraw only when needed. Use image controls instead of picture boxes. Use line controls instead of the PSet method. Preload forms and keep them hidden until needed. Use progress indicators when appropriate. Preload the default data before showing a form. Hide controls that may repaint when resetting their properties. Use Show in Form_Load event procedure and reduce code in this event. Simplify your starting or startup form. Don't call procedures in modules from your startup form. Example #3: Demonstrating the Technique of Hiding Controls Start Visual Basic; or choose New Project from the File menu (ALT+ F, N) if Visu al Basic is already running. Form1 is created by default. Add a control array of five text boxes to Form1.FRM. Add the following to the Form_Resize event procedure: Sub Form_Resize () Dim i As Integer Dim ht As Integer ht = Form1.ScaleHeight / 5 For i = 0 to 4 text1(i).Move 0, i * ht, Form1.ScaleWidth, ht Next i End Sub Add the following to the Form_Load event procedure: Sub Form_Load () Dim buffer As String Dim i As Integer Open "datacons.txt" For Input As #1 ' Open test file. buffer = Input(LOF(1), 1) ' Grab all contents. Close #1 For i = 0 to 4 ' Place in the 5 text controls. text1(i).Text = buffer Next i End Sub Run the sample. First grab the left side of Form1 and move it to the left, then grab the top of Form1 and move it upward. You should see five separate text boxe s being re-painted. To speed up or avoid four controls from being repainted, implement the changes l isted in steps 7 and 8, then proceed to run the sample with actions listed in st ep 5, above. Add a picture box; then inside the picture box, add a control array of five text boxes to Picture1. Add the following to the Form_Resize event procedure: Sub Form_Resize () Dim i As Integer Dim ht As Integer Dim wd As Integer wd = form1.ScaleWidth picture1.Visible = False ' Hide the picture picture1.Move 0, 0, wd, form1.ScaleHeight ' and reposition it. ht = form1.ScaleHeight / 5 For i = 0 To 4 ' Now resize the text ' boxes... text1(i).Move 0, i * ht, wd, ht Next i picture1.Visible = True ' ...and show the picture. End Sub This technique adds a resource with the picture box, but helps with the apparent speed when you resize your form. This technique makes your application appear m ore uniform when running. Example #4: Demonstrating the Techique of a Simple Startup Form This example shows you how to implement a Start-Up form or Display Banner for yo ur program. In this example, Form1 is the start-up form and Form2 is the main fo rm of your actual working program. Start Visual Basic; or choose New Project from the File menu (ALT+ F, N) if Visu al Basic is already running. Form1 is created by default. Add a second form to your project, Form2.frm. Add the following to the Form_Load event procedure of Form1.frm: Sub Form_Load () Me.Show ' Show the form. Me.Refresh ' Refresh needed to force repaint of labels, etc. Load Form2 ' Load the actual working form. ' Assign any default properties, values, etc., for Form2 here. Form2.Show ' Display main form. Unload Me ' Unload me. End Sub Run this sample. This will display your simple Form1.FRM and load up Form2.FRM i n the background. Once Form2.FRM is loaded and displayed, Form1.FRM is unloaded.
INCREASING AVAILABLE RESOURCES You can increase available resources in the following ways: Create simulated controls using a graphic object. Draw graphics images during run time. Use the Image control instead of picture boxes. INCREASING AVAILABLE RAM You can increase available RAM in the following ways: Use Integer variables whenever possible. Create dynamic arrays to free arrays when not needed. Drop or unload controls and forms when they are not needed. Use local variables. INCREASING DISK SPACE You can increase disk space in the following ways: Build controls at load time. Minimize header size. Delete unnecessary functions and subroutines. Delete unused objects and associated methods.