VB 2013 Application Out of Memory

梦想的初衷 提交于 2020-01-17 02:55:49

问题


I'm new to VB but recently created my first working app :) Anyway it just compresses files and little bit more. The latest thing that I added was a marquee style progress bar to animate while the operation was in progress and stop when it ends and the user can do the next zip operation. The progress bar wasn't updating, so I used a background worker to do the actual task while the button click just did the animation. Since then I've notcied serious degredation in the app. It struggles to load. I even got an out of memory error. Not sure if the background worker is related, but I thought I'd mention as it was the last update. Has anyone experienced anything similar? If I can provide and specific info, please ask me for it! Many thanks.

UPDATE: So I understand that I'm not using the BGWorker correctly. I will change that. But I found even with that removed, I still had issues. So I created a new form and started adding in bits of my code one by one. Anyway, I fell at the first hurdle with my form load sub. So I added that in slowly. I found that when ever I have any statements that load a variable from settings for persistent settings that the app falls over. Below is my code. Can anyone see what's up?????

UPDATE: I've found that if I load from settings the memory useage shoots up. I tried this too with saving settins on form closed. Below is the error received. The same out of memory occurs when trying to load settings too. I never experienced this on the first form I created. So perhaps I have missed some settings on the second, because the implementation in the code hasn't changed.

System.Configuration.ConfigurationErrorsException: Failed to save settings: An error occurred executing the configuration section handler for userSettings/Backup_Tool.My.MySettings. ---> System.Configuration.ConfigurationErrorsException: An error occurred executing the configuration section handler for userSettings/Backup_Tool.My.MySettings. ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown

This is when I added in the code below:

Private Sub Form1_Closed(sender As Object, e As EventArgs) Handles MyBase.FormClosed

    ' TAB PAGE 1.

    ' Save controls to settings.

    My.Settings.StartPathTextBox1 = StartPathTextBox1.Text
    My.Settings.ZipPathTextBox1 = ZipPathTextBox1.Text
    My.Settings.CopyPathTextBox1 = CopyPathTextBox1.Text

    My.Settings.ZipSelectCheckBox1 = ZipSelectCheckBox1.Checked
    My.Settings.CopySelectCheckBox1 = CopySelectCheckBox1.Checked

    For Each s As String In StartNameListBox1.Items()
        My.Settings.StartNameListBoxItems1.Add(s)
    Next

    For Each s As String In StartNameListBox1.SelectedItems()
        My.Settings.StartNameListBoxSelectedItems1.Add(s)
    Next

End Sub


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    ' FORM 1.

    ' Initialise specialised string collections.

    If My.Settings.StartNameListBoxItems1 Is Nothing Then
        My.Settings.StartNameListBoxItems1 = _
            New System.Collections.Specialized.StringCollection
    End If

    If My.Settings.StartNameListBoxSelectedItems1 Is Nothing Then
        My.Settings.StartNameListBoxSelectedItems1 = _
            New System.Collections.Specialized.StringCollection
    End If

    ' TAB PAGE 1.

    ' Restore controls from saved settings.

    StartPathTextBox1.Text() = My.Settings.StartPathTextBox1
    ZipPathTextBox1.Text() = My.Settings.ZipPathTextBox1
    CopyPathTextBox1.Text() = My.Settings.CopyPathTextBox1

    ZipSelectCheckBox1.Checked = My.Settings.ZipSelectCheckBox1
    CopySelectCheckBox1.Checked = My.Settings.CopySelectCheckBox1

    For Each s As String In My.Settings.StartNameListBoxItems1()
        StartNameListBox1.Items.Add(s)
    Next

    For Each s As String In My.Settings.StartNameListBoxSelectedItems1()
        StartNameListBox1.SelectedItems.Add(s)
    Next

    ' Decide controls initial states.

    If StartNameListBox1.SelectedItems.Count = 0 Then
        ZipSelectCheckBox1.Enabled = False
        RunButton1.Enabled = False
    End If

    If ZipSelectCheckBox1.Checked = False Then
        ZipPathTextBox1.Enabled = False
        ZipBrowseButton1.Enabled = False
    End If

    If ZipPathTextBox1.Text = String.Empty Then
        CopySelectCheckBox1.Enabled = False
    End If

    If CopySelectCheckBox1.Checked = False Then
        CopyPathTextBox1.Enabled = False
        CopyBrowseButton1.Enabled = False
    End If

    End Sub

回答1:


It appears to be that you are only ever adding the current selections to the Settings collections. You might well clear the ListBox when they make new selections, but you do not do the same thing with the Settings Collections like My.Settings.StartNameListBoxItems1:

For Each s As String In StartNameListBox1.Items()
    My.Settings.StartNameListBoxItems1.Add(s)
Next

The collection will have all the items in it from all the other times it has ever run already and you are now going to add more to it. Eventually you will have many, many, many items in it.

My.Settings.StartNameListBoxItems1.Clear   ' REMOVE ALL OLD ITEMS
' Save just the current items to the collection
For Each s As String In StartNameListBox1.Items()
    My.Settings.StartNameListBoxItems1.Add(s)
Next

use .Clear on both Collections



来源:https://stackoverflow.com/questions/24640648/vb-2013-application-out-of-memory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!