Yan*_*nis 7 .net c# memory-management large-object-heap c#-4.0
我遇到的问题是我有一些来自MSMQ的大型对象,主要是字符串.我已经将我的内存问题缩小到在大对象堆(LOH)中创建的这些对象,因此将其分段(在探查器的帮助下确认).
在我上面发布的问题中,我得到了一些解决方法,主要是将String拆分为char数组,我做了.
我面临的问题是,在字符串处理结束时(无论采用何种形式),我需要将该字符串发送到另一个我无法控制的系统.所以我想到以下解决方案将此字符串放在LOH中:
无论我做什么 - 不管怎样 - String必须完整(没有char数组或压缩).
我被困在这里吗?我在想如果在这里使用托管环境是一个错误,我们是否应该咬紧牙关去寻找C++类环境.
谢谢,Yannis
编辑:我已经缩小的问题正好代码贴在这里
通过的大字符串放在LOH中.我从已经收到消息的点开始删除了每个处理模块,并且内存消耗趋势保持不变.
所以我想我需要改变这个WorkContext在系统之间传递的方式.
您也许可以实现一个类(称之为LargeString),它重用以前分配的字符串并保留它们的一小部分集合。
由于字符串通常是不可变的,因此您必须通过不安全的指针杂耍来完成每个更改和新的分配。将字符串传递给接收者后,您需要手动将其标记为免费以供重用。不同的消息长度也可能是一个问题,除非接收者可以处理太长的消息,或者您有各种长度的字符串集合。
可能不是一个好主意,但也许比用 C++ 重写所有内容更好。
| 归档时间: |
|
| 查看次数: |
1762 次 |
| 最近记录: |