【发布时间】:2011-09-30 22:37:16
【问题描述】:
这是我的代码行:
StringBuilder myCompleteMessage = new StringBuilder();
myCompleteMessage.Capacity = Int32.MaxValue-1;
也试过了:
myCompleteMessage.Capacity = myCompleteMessage.MaxCapacity-1;
我在第 2 行遇到异常。
Exception of type 'System.OutOfMemoryException' was thrown.
堆栈跟踪:
at System.String.GetStringForStringBuilder(String value, Int32 startIndex, Int32 length, Int32 capacity)
at System.Text.StringBuilder.set_Capacity(Int32 value)
at Orca.Server.HandleClientComm(Object newClient) in C:\Users\Dan\Documents\Visual Studio 2010\Projects\msig\Orca\Server.cs:line 100
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart(Object obj)
【问题讨论】:
-
您是否有理由需要将其指定为容量?如果您让框架来处理容量,通常效果最好(除非您确切知道需要多少)。
-
如果你需要这么大的字符串,你需要重新设计,但问题是好的。
-
什么是“预先设计”是什么意思?
-
在 x64 中也失败了。
-
@Danpe 你是说如果不设置容量就不能让 StringBuilder 增长到 2048 个字符以上?如果是这样,那似乎很奇怪。也许发布另一个问题,询问您为什么在使用 StringBuilder 时遇到这个问题?
标签: c# .net exception memory stringbuilder