我得到一个内存不足的例外,我该如何解决这个问题?

时间:2017-06-23 13:08:57

标签: vb.net datagridview out-of-memory

我有一个包含大约21000行的datagridview,它包含以下列" Ref"," Bestandsart"另外20列,每列包含特定周的库存值,每周将自动添加一个新列。

问题在于" Ref"重复,但不必要具有相同的股票价值,所以我想做的是抛出每一行(j),如果我找到" Ref"在行(j + 1到dg.rowcount-1)中,我获取该行的股票价值并将其添加到行(j)的股票价值并删除重复的"参考"。

这是代码:

    Dim a = datagridview1.RowCount


    Dim s(t2 - t1)



    do until index >=a 
    If Not datagridview1.Rows(index).Cells("ref").Value.Equals(0) Then

        For i = 0 To t2 - t1
            s(i) = datagridview1.Rows(index).Cells("KW" + Convert.ToString(t1 + i)).Value
        Next

        For t = index + 1 To datagridview1.RowCount - 1
            If datagridview1.Rows(index).Cells("Ref").Value.Equals(datagridview1.Rows(t).Cells("Ref").Value) And datagridview1.Rows(index).Cells("Bestandsart").Value.Equals(datagridview1.Rows(t).Cells("Bestandsart").Value) Then
                For i = 0 To t2 - t1
                    s(i) = s(i) + datagridview1.Rows(t).Cells("KW" + Convert.ToString(t1 + i)).Value
                Next
            End If
        Next
        For i = 0 To t2 - t1
            datagridview1.Rows(index).Cells("KW" + Convert.ToString(t1 + i)).Value = s(i)

        Next

        For t = index + 1 To datagridview1.RowCount - 1
            If datagridview1.Rows(index).Cells("ref").Value.Equals(datagridview1.Rows(t).Cells("Ref").Value) And datagridview1.Rows(index).Cells("Bestandsart").Value.Equals(datagridview1.Rows(t).Cells("Bestandsart").Value) Then
                datagridview1.Rows(t).Cells("ref").Value = 0
                datagridview1.Rows(t).Cells("Bestandsart").Value = 0
            End If
        Next

        BackgroundWorker1.ReportProgress((index + 1) * 100 / a)
        index = index + 1

    Else
        BackgroundWorker1.ReportProgress((index + 1) * 100 / a)
        index = index + 1
    End If
  loop

t1是第1周,t2是最后一周。

问题是,一旦达到第10000行左右,我就会出现内存不足的问题。

有关如何解决此问题的任何想法。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定您提供的信息是否足够。您使用的是什么版本的.NET?这是一个Webform应用程序还是Winform。

也是发生确切异常的地方。任何内部例外?

好像你正在处理大量的行。在过去的两年里,我一直在将代码从DataGridView转移到GridView。 我的第一个建议是,如果可以的话,使用GridView。我的经验是它更快,更少的错误,绝对少编码。希望你没有被判处处理我正在处理的.Net 1.1 DataGridview。

同时尝试启用专为具有大量数据的案例设计的DataGirdView VirtualMode

 dataGridView1.VirtualMode = true;

https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.virtualmode.aspx