【发布时间】:2011-05-14 10:45:57
【问题描述】:
我的 StringBuilders 中出现了一个很好的 SystemOutOfMemory 异常。这不是由于缺少内存,因此我认为这是内存碎片。
我有大约 200 个 StringBuiler 对象。所有这些都被定期重用(使用 strBldr.clear())。这似乎导致我的系统将内存碎片化得很糟糕。我该如何解决这个问题?
谢谢:)
编辑:
以下是一些数据:
输入和 stringBuilder 的最大记录大小:4 146 698。
平均重新启动 stringBuilders/秒:>120(可能 >>120)
输入@第一个错误的长度:16 972(字符串)
StringBuilder 长度@第一个错误:16
创建新 stringBuilder 的次数@第一个错误:~32500
内存使用总量@第一个错误 637 448K
【问题讨论】:
-
你怎么知道这不是因为内存不足?您已经完成了哪种类型的测试/分析/调试?
-
我在一台 16 GB 内存的机器上运行,该程序的最大时钟速度为 700 Mb(任务管理器)。因此我得出结论,这不是缺少内存。
-
是的,这是总 RAM。超过可分配给单个
StringBuilder实例的内存量会怎样?查看 MSDN 上的Remarks:“当实例的值扩大时,StringBuilder 可以根据需要分配更多内存来存储字符,并相应调整容量。分配的内存量是特定于实现的,ArgumentOutOfRangeException 或 OutOfMemoryException如果所需的内存量大于最大容量,则抛出。 -
@Cody,你上面的两个 cmets 会是一个很好的答案,你不觉得吗? :)
标签: c# .net stringbuilder memory-fragmentation