Vb.net 在vb中获取系统outofmemoryexception生成字符串

Vb.net 在vb中获取系统outofmemoryexception生成字符串,vb.net,Vb.net,我有一个大约有30000条记录的数据集,所以在它里面开发并构建字符串文件Tavki trows exection,SystemOutOfMemory。我怎样才能解决这个问题。使用阵列是可能的解决方案还是其他解决方案 Dim sb As New StringBuilder For Each inRow In ds_in.Tables(0).Rows rbr += 1 pisi_red = "2" & E

我有一个大约有30000条记录的数据集,所以在它里面开发并构建字符串文件Tavki trows exection,SystemOutOfMemory。我怎样才能解决这个问题。使用阵列是可能的解决方案还是其他解决方案

Dim sb As New StringBuilder    
For Each inRow In ds_in.Tables(0).Rows
                    rbr += 1
                    pisi_red = "2" & Enc3.prefill(rbr, "0", 6) & Share.RightPrefill(inRow("prioritet"), "0", 5)
                    pisi_red &= Enc3.prefill(Enc3.IsNull(inRow("smetka_davac"), "0"), "0", 15)
                    pisi_red &= Share.RightPrefill(Enc3.lat2kir(Enc3.IsNull(inRow("naziv_davac"), "")), " ", 70)
                    pisi_red &= Share.RightPrefill(Enc3.IsNull(inRow("povik_broj_davac"), ""), " ", 24)
                    pisi_red &= Share.RightPrefill(Enc3.lat2kir(Enc3.IsNull(inRow("cel_na_doznaka"), "")), " ", 70)
                    pisi_red &= Enc3.prefill(inRow("sif_tip_plakanje"), "0", 6)
                    pisi_red &= "+" & Enc3.prefill(FormatNumber(inRow("iznos"), 5, TriState.False, TriState.False, TriState.False), "0", 21)
                    pisi_red &= inRow("smetka_primac") & Share.RightPrefill(Enc3.lat2kir(Trim(inRow("naziv_primac"))), " ", 70)
                    pisi_red &= Share.RightPrefill(Enc3.IsNull(inRow("povik_broj_primac"), ""), " ", 24)
                    pisi_red &= inRow("tip_instrument") & Share.RightPrefill(Enc3.IsNull(inRow("broj_transakcija"), ""), " ", 16)
                    pisi_red &= inRow("sistem_poravnuva") & Enc3.prefill(Enc3.IsNull(inRow("edb"), ""), "0", 13)
                    pisi_red &= vbCrLf
                    sb.Append(pisi_red)
                    'fileStavki &= pisi_red
                Next
在这之后我有

 sw.Write(fileStavki)
        sw.Flush()
        sw.Close()
我认为即使我使用stringbuilder,字符串fileStavki也会像这样构建

filestavki = sb.ToString

在这里,我还将介绍一下Memory exeption

您需要向
StringBuilder
类做自我介绍。使用
StringBuilder
就像@jmchiliney建议的那样:创建一个实例,
Append()
所有字符串,调用
ToString()
并将其结果分配给
fileStavki
,最后调用
Clear
进行下一次
inRow
。更新了更详细的问题确定了问题的内容,fileStavki=sb行没有问题。ToStringStrings在.Net中是不可变的--它们不能更改。每次使用
&
都会创建一个新字符串,并在追加下一个字符串之前将旧字符串的内容复制到该字符串中。每次执行此代码时,您将创建大约16个新字符串。因此,对于30000行,您将创建大约480000个字符串。使用别人建议的
StringBuilder
是更好的方法。