Hello! I have this problem with arrays. I have a class Keress given with this: ' Gambas class file
Export ' Gambas module file Create Static Private nev As New String[] Private ut As New String[] Private nagy As New Float[] Private mikor As New String[] Private kotet As New String[] Public SConn As New Connection Public Sub Search(y As Integer, stext As String, detect As String, direction As String) As Integer '########################### Do the search for files/folders ########################## Dim dis As Integer = 0 Dim n, m, i, j As Integer Dim visszhang, subhang As Result Dim dubl, indexer As String[] Dim quert, point, mkb, xkl, fullsearch As String Dim nyogd As TextLabel Dim keep As PictureBox SConn.Name = "GamCat" SConn.Type = "sqlite" SConn.Host = User.Home & "/.GamCat" SConn.Open() If FMain.holder.value = False Then Trashing() Endif FMain.gV.Columns.Count = 5 Select Case y Case 1 If FMain.only.Value = True Then visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE Category=&1 AND FName=&2 AND (FSubs='0' OR FSubs='3') ORDER BY " & detect & " " & direction & ";", FMain.SelcatBox.Text, stext) For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Else visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE FName=&1 AND (FSubs='0' OR FSubs='3') ORDER BY " & detect & " " & direction & ";", stext) For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Case 2 '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! If FMain.only.Value = True Then visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE Category=&1 AND FName LIKE &2 AND (FSubs='0' OR FSubs='3') ORDER BY " & detect & " " & direction & ";", FMain.SelcatBox.Text, "%" & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Else visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE FName LIKE &1 AND (FSubs='0' OR FSubs='3') ORDER BY " & detect & " " & direction & ";", "%" & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Case 3 If FMain.only.Value = True Then visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE Category=&1 FName LIKE &2 AND (FSubs='0' OR FSubs='3') ORDER BY " & detect & " " & direction & ";", FMain.SelcatBox.Text, "%." & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Else visszhang = FMain.DBconX.Exec("SELECT * FROM CENTRAL WHERE FName LIKE &1 AND (FSubs='0' OR FSubs='3') ORDER BY " & detect & " " & direction & ";", "%." & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Case 4 If FMain.only.Value = True Then visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE Category=&1 AND FName=&2 AND FSubs='1' ORDER BY " & detect & " " & direction & ";", FMain.SelcatBox.Text, stext) For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Else visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE FName=&1 AND FSubs='1' ORDER BY " & detect & " " & direction & ";", stext) For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Case 5 If FMain.only.Value = True Then visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE Category=&1 AND FName LIKE &2 AND FSubs='1' ORDER BY " & detect & " " & direction & ";", FMain.SelcatBox.Text, "%" & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Else visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE FName LIKE &1 AND FSubs='1' ORDER BY " & detect & " " & direction & ";", "%" & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Case 6 If FMain.only.Value = True Then visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE Category=&1 AND FName LIKE &2 AND FSubs='1' ORDER BY " & detect & " " & direction & ";", FMain.SelcatBox.Text, "%." & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Else visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE FName=&1 ORDER BY " & detect & " " & direction & ";", stext) For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Case 7 If FMain.only.Value = True Then visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE Category=&1 FName=&2 ORDERBY " & detect & " " & direction & ";", FMain.SelcatBox.Text, stext) For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Else visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE FName=&1 ORDER BY " & detect & " " & direction & ";", stext) For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Case 8 If FMain.only.Value = True Then visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE Category=&1 FName LIKE &2 ORDER BY " & detect & " " & direction & ";", FMain.SelcatBox.Text, "%" & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Else visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE FName LIKE &1 ORDER BY " & detect & " " & direction & ";", "%" & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Case 9 If FMain.only.Value = True Then visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE Category=&1 FName LIKE &2 ORDER BY " & detect & " " & direction & ";", FMain.SelcatBox.Text, "%" & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Else visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE FName LIKE &1 ORDER BY " & detect & " " & direction & ";", "%" & stext & "%") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Case 10 If FMain.only.Value = True Then If FMain.nuvola > 0 visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE Category=&1 ORDER BY " & detect & " " & direction & ";", FMain.SelcatBox.Text) For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Else If FMain.nuvola > 0 visszhang = SConn.Exec("SELECT * FROM CENTRAL ORDER BY " & detect & " " & direction & ";") For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Endif Case 11 xkl = FMain.list[FMain.list.Row, 0].Text If FMain.uptf.Value = True Then visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE VName=&1 AND FName LIKE &2 ORDER BY " & detect & " " & direction & ";", xkl, "%" & stext & "%") Else visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE VName=&1 ORDER BY " & detect & ";", xkl) Endif For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", xkl) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Case 12 If FMain.list.Rows.Count > 0 Then If FMain.uptf.Value = True And FMain.archTypeBox.Text = ("ALL") Then visszhang = SConn.Exec("SELECT * FROM ARCHIVES WHERE Name LIKE &1 ORDER BY NAME " & direction & ";", "%" & stext & "%") Endif If FMain.uptf.Value = True And FMain.archTypeBox.Text <> ("ALL") Then visszhang = SConn.Exec("SELECT * FROM ARCHIVES WHERE Name LIKE &1 AND Type=&2 ORDER BY NAME " & direction & ";", "%" & stext & "%", FMain.archTypeBox.Text) Endif If FMain.uptf.Value = False And FMain.archTypeBox.Text = ("ALL") Then visszhang = SConn.Exec("SELECT * FROM ARCHIVES ORDER BY NAME;") Endif If FMain.uptf.Value = False And FMain.archTypeBox.Text <> ("ALL") Then visszhang = SConn.Exec("SELECT * FROM ARCHIVES WHERE Type=&1 ORDER BY NAME;", FMain.archTypeBox.Text) Endif For Each visszhang dis = Insert(visszhang!"Name", visszhang!"Parent", 0, "-", visszhang!Volume) Next If FMain.uptf.Value = True Then visszhang = SConn.Exec("SELECT * FROM ISO WHERE Name LIKE &1 ORDER BY NAME " & direction & ";", "%" & stext & "%") Else visszhang = SConn.Exec("SELECT * FROM ISO ORDER BY NAME;") Endif For Each visszhang dis = Insert(visszhang!"Name", visszhang!"Holder", 0, "-", visszhang!Volume) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next Endif Case 13 ' Let's list the content of a folder dubl = Split(stext, "#") visszhang = SConn.Exec("SELECT * FROM CENTRAL WHERE VName=&1 AND FPath=&2 ORDER BY " & detect & " " & direction & ";", dubl[0], dubl[1]) For Each visszhang dis = Insert(visszhang!"FName", visszhang!"FPath", Round(visszhang!"FSize" / 1048576, -2), visszhang!"FChanged", visszhang!VName) Next FMain.gV.Rows.Count = dis For i = 0 To dis - 1 FMain.gv_Data(i, 0) FMain.gv_Data(i, 1) FMain.gv_Data(i, 2) FMain.gv_Data(i, 3) FMain.gv_Data(i, 4) Next End Select SConn.Close() Return nev.Count End Public Sub Trashing() nev.Clear() ut.Clear() nagy.Clear() mikor.Clear() kotet.Clear() End Public Sub Remove(mit As String) ut.Remove(mit) nev.Remove(mit) kotet.Remove(mit) mikor.Remove(mit) nagy.Remove(mit) End Public Sub Insert(v1 As String, v2 As String, v3 As Float, v4 As String, v5 As String) As Integer nev.Add(v1) ut.Add(v2) nagy.Add(v3) mikor.Add(v4) kotet.Add(v5) Return nev.Count End Public Sub Name(x As Integer) As String Return nev[x] End Public Sub Volm(x As Integer) As String Return kotet[x] End Public Sub Road(x As Integer) As String Return ut[x] End Public Sub Num() As Integer Return nev.Count End Public Sub Size(x As Integer) As String Return nagy[x] End Public Sub When(x As Integer) As String Return mikor[x] End Public Sub Mhet(szuro As String) Dim todie As New Integer[] Dim kotetx As New String[] Dim utol, m, n As Integer If (szuro <> Null And szuro <> "") Then 'Deleting after a splitted string pattern utol = nev.Length - 1 For m = 0 To utol If InStr(nev[m], szuro) = 0 Then todie.Add(m) Endif Next todie.Sort(16) If FMain.robocop = True Then FMain.roboBox.Add("#" & szuro) Endif For m = 0 To todie.Length - 1 Remove(todie[m]) Next FMain.gV.Rows.Count -= todie.Length FMain.gV.Refresh() todie.Clear() FMain.hany.Text = FMain.gV.Rows.Count FMain.combo.Clear() kotetx.Clear n = FMain.gV.Rows.Count - 1 For m = 0 To n kotetx.Add(FMain.gV[m, 1].Text) Next kotetx.Sort() If n > 0 Then FMain.combo.Add(kotetx[0]) For m = 1 To n If (kotetx[m - 1] <> kotetx[m]) Then FMain.combo.Add(kotetx[m]) Endif Next Endif Endif End The class Keress is used for search, and its private arrays are declared at the beginning of the file. This class has only one instance, and it is responsible for the search through the database. After the search it handles the results to a GridView called gV, situated on FMain form. The problem is: if these arrays are filled with search's hits, the memory consumption goes up to a certain level, which is O.K. After that, when I perform another search, with much lower number of found elements, the memory consumption won't fall although all the arrays are cleared before filling them with fresh values. Where am I wrong? I would like to see the memory consumption is in accord with the number of found elements. It looks like .Clear is clearing the array from elements, but keeping its size. Why? Thank you for the patience! Csaba ------------------------------------------------------------------------------ Keep Your Developer Skills Current with LearnDevNow! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-d2d _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user