我有包含一些相当大的字符串的数据数据库,每个字符串都包含一个序列化的分层数据集合(数据存储为字符串而不是二进制流以允许与 VB6 交互)。据我所知,任何返回超过 85,000 字节字符串的数据库查询都会立即将该字符串扔到大对象堆上。如果字符串立即被拆分成更小的部分,因此大对象将是短暂的,有没有办法避免让这些对象进入大对象堆并在下一个 LOH 集合之前无用地留在那里?我一直读到 LOH 对象应该被重用,但我不知道在这种情况下我将如何去做。
编辑--我将 SqlClient 对象与 DataReader 一起使用。
最佳答案
您不能重复使用 string
s,因为它们是不可变的。
您可以做的是从数据库( example for ADO )流式传输数据,这意味着您可以完全避免 LOH。
或者您可以将列加载到 char
数组(或 byte
数组),只要足够大就可以重复使用。
不过,这一切都取决于您使用的是什么数据库提供程序或 ORM。
关于.net - 从数据库中读取大字符串而不分割大对象堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243998/