gpt4 book ai didi

.net - VB.net 需要内存高效功能

转载 作者:行者123 更新时间:2023-12-05 00:37:03 24 4
gpt4 key购买 nike

当 RowCollection 为 50000+ 时,我从以下函数中出现内存不足异常,因此我需要提高内存效率。该函数只需要构造一个逗号分隔的字符串,该字符串存储在 RowCollection 中的行索引中。任何人都可以在下面发现任何明显的内存消耗操作吗?

N.B RowCollection 仅包含存储为整数的行索引列表。

 Private Function GetCommaSeparatedString(ByRef RowIndexes As ArrayList) As String
Dim RowString As String = String.Empty

'Build a string of the row indexes
'Add one onto each index value so our indexes begin at 1
For Each Row In RowIndexes
RowString += CInt(Row.ToString) + 1 & ","
Next

'Remove the last comma
If RowString.Length > 0 Then
RowString = RowString.Substring(0, RowString.Length - 1)
End If

Return RowString
End Function

提前致谢。

最佳答案

我不确定你为什么会出现内存不足错误,除非你的行的字符串表示非常大,因为你永远不会有超过一两个不可回收的字符串。

但是,您的方法 非常低效,因为它花费大量时间复制半构建字符串的内容。 StringBuilder 在构建大字符串时更合适,因为它可以被修改而无需每次都重新创建内容。

但是,在这种情况下,即使是 StringBuilder 也是一个坏主意,因为您正在连接字符串并且已经有一种方法可以做到这一点:String.Join。只需使用 LINQ 查询执行 add-one-to-index-stuff 即可获得单行:

Private Function GetCommaSeparatedString(ByVal RowIndexes As ArrayList) As String
Return String.Join(",", From index In RowIndexes Select CInt(index) + 1)
End Function

我还建议不要通过引用传递,除非您确实需要它。您没有修改 RowIndexes,因此按值传递它。我也不确定你为什么要 ToString()-ing 索引然后立即解析它。他们不是已经整数了吗?只需使用 CInt。

关于.net - VB.net 需要内存高效功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3610800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com