Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations John Tel on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Optimizing code ( use about 24mb of memory ) 1

Status
Not open for further replies.

Antithott

IS-IT--Management
Jan 20, 2006
90
DK
Hi, ive asked before about how to cut memory use. but it seems i cant get it below the 22mb at startup, and every click add between 4 and 16 kb. Is it normal that a pure interface without running any code start out at 22mb, and ekep rising. Its a helpdesk system which auto update at about every 2minuts. So the MB use gets quite high.

This is a SUB from click on the first button. ITs a login form, and when clicked ok, it checks against a Mysql database if teh password supplied it the same as in the database.

If see soemthign i should do in another way im open to suggestions.

Code:
 Private Sub LoginFormOK()
        ' Tjekker om Brugernavn og Adgangskode boksen indeholder tekst, hvis ikke giv fejl kode i Status boksen
        If TxtBrugernavn.Text = String.Empty Or TxtAdgangskode.Text = String.Empty Then
            Status.Text = "Login fejl : Angiv brugernavn og adgangskode for at logge ind."
        End If
        ' Tjekker om brugernavn er udfyldt og om adgangskode er tom.
        If TxtBrugernavn.Text <> String.Empty And TxtAdgangskode.Text = String.Empty Then
            Status.Text = "Login fejl : Angiv adgangskode for at logge ind."
        End If
        ' Tjekker om brugernavn er tom og om adgangskode er udfyldt.
        If TxtBrugernavn.Text = String.Empty And TxtAdgangskode.Text <> String.Empty Then
            Status.Text = "Login fejl : Angiv brugernavn for at logge ind."
            ' Tjekker om brugernavn og adgangskode er udfyldt.
        End If

        ' Test bruger som ikke kan noget med databasen, bruges kun til at tjekke design på frontend
        If TxtBrugernavn.Text.ToLower = "test" And TxtAdgangskode.Text = "test" Then
            StrSidsteLogin = Date.Now
            StrAdgangsNiveauNavn = "Test Bruger"
            StrBrugernavn = TxtBrugernavn.Text
            IntAdgangsNiveau = 15
            LogonSuccessful()
        End If


        If TxtBrugernavn.Text <> String.Empty And TxtAdgangskode.Text <> String.Empty Then
            ' Test bruger, kan logge ind uden at database er sat op, men kan intet lave.

            Dim MyConString As String = DatabaseForbindelse
            Dim MyConnection As New OdbcConnection(MyConString)


            MyConnection.Open()

            Dim MyCommand As New OdbcCommand
            MyCommand.Connection = MyConnection
            MyCommand.CommandText = "SELECT * FROM brugere WHERE Brugernavn = '" & TxtBrugernavn.Text & "'"
            MyCommand.ExecuteNonQuery()
            Dim reader As Odbc.OdbcDataReader = MyCommand.ExecuteReader()
            While reader.Read
             
                ' Hvis adgangskode feltet ikke er tomt gør følgende :
                If reader.IsDBNull(2) = False Then
                    ' Tjek om koden i Txt boksen paase til koden i databasen.
                    If TxtAdgangskode.Text = reader.GetValue(2) Then
                        ' Passer koden til den i databasen, skal alle oplysningerne hentes ind i variabler.
                        ' 1 = Brugernavn
                        If reader.IsDBNull(1) = False Then
                            StrBrugernavn = reader.GetValue(1)
                        End If
                        
                        ' 3 = fornavn
                        If reader.IsDBNull(3) = False Then
                            StrFornavn = reader.GetValue(3)
                        End If
                        ' 4 = Efternavn
                        If reader.IsDBNull(4) = False Then
                            StrEfternavn = reader.GetValue(4)
                        End If
                        ' 5 = Stilling
                        If reader.IsDBNull(5) = False Then
                            StrStilling = reader.GetValue(5)
                        End If
                        ' 6 = Vej
                        If reader.IsDBNull(6) = False Then
                            StrVej = reader.GetValue(6)
                        End If
                        ' 7 = By
                        If reader.IsDBNull(7) = False Then
                            StrBy = reader.GetValue(7)
                        End If
                        ' 8 = Postnummer
                        If reader.IsDBNull(8) = False Then
                            StrPostnummer = reader.GetValue(8)
                        End If
                        ' 9 = Telefon
                        If reader.IsDBNull(9) = False Then
                            StrTelefon = reader.GetValue(9)
                        End If
                        ' 10 = Email
                        If reader.IsDBNull(10) = False Then
                            StrEmail = reader.GetValue(10)
                        End If
                        ' 11 = Adgangsniveau
                        If reader.IsDBNull(11) = False Then
                            IntAdgangsNiveau = reader.GetValue(11)
                        End If
                        ' 12 = SidsteLogon
                        If reader.IsDBNull(12) = False Then
                            StrSidsteLogin = reader.GetValue(12)
                        End If

                        ' Sæt vinduerne så de passer til en bruger som er logget på.
                        LogonSuccessful()

                        'Hvis koden ikke passer til den i databasen, give en fejl besked i status linjen.
                    ElseIf TxtAdgangskode.Text.ToLower <> reader.GetValue(2) Then
                        Status.Text = "Logon fejl : Koden er forkert, den passer ikke til den i databasen"
                    End If
                End If

            End While


            reader.Close()
            MyConnection.Close()
            MyConnection.Dispose()



            ' Tjekker om brugernavn og kode passer sammen, hvis ikke vis fejl i status.
            '        ElseIf TxtBrugernavn.Text.ToLower = "test" And TxtAdgangskode.Text <> "test" Then
            '           Status.Text = "Login fejl : Der var fejl i brugernavn eller kode."

        End If



    End Sub
 
Set the connection and command objects to Nothing after you are finished with them:

reader.Close()
MyConnection.Close()
MyConnection.Dispose()
[red]MyConnection = Nothing

MyCommand.Dispose()
MyCommand = Nothing

GC.Collect()[/red]

I used to rock and roll every night and party every day. Then it was every other day. Now I'm lucky if I can find 30 minutes a week in which to get funky. - Homer Simpson

Arrrr, mateys! Ye needs ta be preparin' yerselves fer Talk Like a Pirate Day! Ye has a choice: talk like a pira
 
Thanks for the help.

the program now uses between 22 and 24mb at startup. But dont use much else when working in it.

2 other questions though, Is there alot of performance diffrence in retrieving data from Sql by doing reader.getvalue(0) rather then reader.getstring(0) if the datafield is string?

Also does anyone have a suggestion as to how i can make this piee of code smaller.. I ahve to reapeat the same code for each value i wanna get, and this one is the small sql query.

Code:
  ' 1 = Brugernavn
                        If reader.IsDBNull(1) = False Then
                            StrBrugernavn = reader.GetValue(1)
                        End If
                        
                        ' 3 = fornavn
                        If reader.IsDBNull(3) = False Then
                            StrFornavn = reader.GetValue(3)
                        End If
                        ' 4 = Efternavn
                        If reader.IsDBNull(4) = False Then
                            StrEfternavn = reader.GetValue(4)
                        End If
                        ' 5 = Stilling
                        If reader.IsDBNull(5) = False Then
                            StrStilling = reader.GetValue(5)
                        End If
                        ' 6 = Vej
                        If reader.IsDBNull(6) = False Then
                            StrVej = reader.GetValue(6)
                        End If
                        ' 7 = By
                        If reader.IsDBNull(7) = False Then
                            StrBy = reader.GetValue(7)
                        End If
                        ' 8 = Postnummer
                        If reader.IsDBNull(8) = False Then
                            StrPostnummer = reader.GetValue(8)
                        End If
                        ' 9 = Telefon
                        If reader.IsDBNull(9) = False Then
                            StrTelefon = reader.GetValue(9)
                        End If
                        ' 10 = Email
                        If reader.IsDBNull(10) = False Then
                            StrEmail = reader.GetValue(10)
                        End If
                        ' 11 = Adgangsniveau
                        If reader.IsDBNull(11) = False Then
                            IntAdgangsNiveau = reader.GetValue(11)
                        End If
                        ' 12 = SidsteLogon
                        If reader.IsDBNull(12) = False Then
                            StrSidsteLogin = reader.GetValue(12)
                        End If
 
I don't know if this will make any difference. But you can try.
Code:
Dim i As Integer
For i = 1 to 12
  If reader.IsDBNull(i) = False Then
     Select Case i
        Case 1
           StrBrugernavn = reader.GetValue(i)
        Case 3
           StrBrugernavn = reader.GetValue(i)
        Case 4
           StrEfternavn = reader.GetValue(i)
        Case 5
           StrStilling = reader.GetValue(i)
        Case 6
           StrVej = reader.GetValue(i)
        Case 7
           StrBy = reader.GetValue(i)
        Case 8
           StrPostnummer = reader.GetValue(i)
        Case 9
           StrTelefon = reader.GetValue(i)
        Case 10
           StrEmail = reader.GetValue(i)
        Case 11
           IntAdgangsNiveau = reader.GetValue(i)
        Case 12
           StrSidsteLogin = reader.GetValue(i)
        Case Else
           'Do nothing
     End Select
  End If
Next i
 
Rather than use the Block If structure or the Case Statement, I would have thought that it would be simpler to just have a series of one line If statements such as:

[tt]
If Not reader.IsDBNull(1) Then StrBrugernavn = reader.GetValue(1)
If Not reader.IsDBNull(3) Then StrFornavn = reader.GetValue(3)
...
...
[/tt]

Hope this helps.



[vampire][bat]
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top