VB 2013应用程序内存不足

时间:2014-07-08 19:54:22

标签: vb.net visual-studio-2013 out-of-memory backgroundworker

我是VB的新手,但最近创建了我的第一个工作应用程序:)无论如何它只是压缩文件而且更多。我添加的最新内容是在操作正在进行时动画的选框样式进度条,在结束时停止,用户可以执行下一个zip操作。进度条没有更新,所以我使用后台工作人员执行实际任务,而按钮单击只是做动画。从那时起,我在应用程序中发现了严重的降级。它很难加载。我甚至出现了内存不足的错误。不确定后台工作者是否相关,但我想我会提到,因为这是最后一次更新。有没有人经历过类似的事?如果我能提供和具体信息,请问我!非常感谢。

更新:我明白我没有正确使用BGWorker。我会改变这一点。但我发现即使删除了,我仍然有问题。所以我创建了一个新表单并开始逐个添加我的代码。无论如何,我在表格载荷下遇到了第一道障碍。所以我慢慢补充说。我发现,当我有任何语句从应用程序失败的持久性设置的设置加载变量时。以下是我的代码。任何人都可以看到了什么??????

更新:我发现如果我从设置加载,内存使用量就会增加。我也尝试过将表格保存在表格上。以下是收到的错误。尝试加载设置时也会出现相同的内存不足。我从未在我创建的第一个表单上体验过这个。所以也许我错过了第二个设置,因为代码中的实现没有改变。

System.Configuration.ConfigurationErrorsException:无法保存设置:执行userSettings / Backup_Tool.My.MySettings的配置节处理程序时发生错误。 ---> System.Configuration.ConfigurationErrorsException:执行userSettings / Backup_Tool.My.MySettings的配置节处理程序时发生错误。 ---> System.OutOfMemoryException:抛出了类型'System.OutOfMemoryException'的异常

这是我在下面的代码中添加的内容:

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 个答案:

答案 0 :(得分:1)

出现,因为您只是将当前选择添加到“设置”集合中。您可以在ListBox进行新选择时清除My.Settings.StartNameListBoxItems1,但您对For Each s As String In StartNameListBox1.Items() My.Settings.StartNameListBoxItems1.Add(s) Next 之类的设置集合不做同样的事情:

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

该集合将包含其中已经运行的所有其他项目中的所有项目,您现在将添加更多项目。最终你会有很多很多项目。

{{1}}

在两个集合中使用.Clear