gpt4 book ai didi

c# - 用于字符串连接的 StringBuilder 抛出 OutOfMemoryException

转载 作者:可可西里 更新时间:2023-11-01 03:14:39 24 4
gpt4 key购买 nike

我们大多倾向于遵循上述最佳实践。

看看String vs StringBuilder

但 StringBuilder 可能会抛出 OutOfMemoryException,即使有足够的可用内存也是如此。它抛出 OOM 异常,因为它需要“连续的内存块”。

一些引用链接 StringBuilder OutOfMemoryException

还有很多......

你们中有多少人遇到过这个问题或意识到了这个问题,你们做了什么来解决这个问题?

有什么我遗漏的吗?

P.S:我不知道这一点。

我已经改写了这个问题。

*** 同样的事情也适用于手动连接(我会验证这一点并更新 SO)。另一件让我担心的事情是系统中有足够的内存。这就是我在这里提出这个问题的原因,以检查是否有人遇到过这个问题,或者代码是否存在严重错误。

最佳答案

您创建的底层字符串还需要一个连续的内存块,因为它表示为一个字符数组(数组需要连续的内存)。如果 StringBuilder 抛出 OOM 异常,您将无法在没有它的情况下构建底层。

如果创建字符串导致 OOM,则您的应用程序中可能存在更严重的问题。

根据澄清进行编辑:

有一小部分情况会在手动连接成功时使用 StringBuilder 构建字符串失败。手动连接将使用所需的确切长度来组合两个字符串,而 StringBuilder 具有不同的内存分配算法。它更具侵略性,可能会分配比字符串实际需要更多的内存。

使用 StringBuilder 还会导致所需内存暂时加倍,因为字符串将在短时间内同时以 System.String 形式和 StringBuilder 存在。

但是,如果一种方式导致 OOM 而另一种方式没有,它仍然可能表明您的程序中存在更严重的问题。

关于c# - 用于字符串连接的 StringBuilder 抛出 OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/363680/

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