.net - 从数据库中读取大字符串而不分割大对象堆

标签 .net garbage-collection large-object-heap

我有包含一些相当大的字符串的数据数据库,每个字符串都包含一个序列化的分层数据集合(数据存储为字符串而不是二进制流以允许与 VB6 交互)。据我所知,任何返回超过 85,000 字节字符串的数据库查询都会立即将该字符串扔到大对象堆上。如果字符串立即被拆分成更小的部分,因此大对象将是短暂的,有没有办法避免让这些对象进入大对象堆并在下一个 LOH 集合之前无用地留在那里?我一直读到 LOH 对象应该被重用,但我不知道在这种情况下我将如何去做。

编辑--我将 SqlClient 对象与 DataReader 一起使用。

最佳答案

您不能重复使用 string s,因为它们是不可变的。

您可以做的是从数据库( example for ADO )流式传输数据,这意味着您可以完全避免 LOH。

或者您可以将列加载到 char数组(或 byte 数组),只要足够大就可以重复使用。

不过,这一切都取决于您使用的是什么数据库提供程序或 ORM。

关于.net - 从数据库中读取大字符串而不分割大对象堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243998/

相关文章:

c# - 为什么单个循环会导致内存泄漏?

git - 有没有办法在 TFS 2013 托管的远程 Git 存储库上进行 git gc/prune?

java - java链表中被删除的节点会发生什么?

go - golang 的垃圾收集器在编译时是如何工作的?

c# - 使用大对象堆后是否应该立即调用GC.Collect以防止碎片化

.net - GC.Collect仅在第2代和大对象堆上

.net - 可视化大对象堆碎片

.net - 添加新实体时的 WCF 方法返回类型

c# - Expression.PropertyOrField 可以用于访问静态属性或字段吗?

c# - Silverlight 的轻量级分析?