gpt4 book ai didi

.net - 在SQL Server和.NET代码+ LINQ之间处理非常大的字符串

转载 作者:行者123 更新时间:2023-12-02 04:19:39 25 4
gpt4 key购买 nike

我有一个需要处理SQL Server数据库和.NET代码之间非常大的字符串的应用程序。我有一个LINQ查询,当将它们保存到数据库时会生成字符串,但是当尝试从数据库中创建字符串时,由于字符串的大小,应用程序会崩溃并出现OutOfMemoryException。

我需要做些什么来使LINQ生成的代码避免这种情况吗?使用某种压缩可能是一种选择,但出于性能原因,希望避免这种情况。

最佳答案

您怎么称呼“很大”?字符串是什么? CLOB? BLOB? XML?

我怀疑您应该使用ExecuteReader()之类的东西,它(通过IDataReader)公开了读取块中此类列的方法:

        using (var reader = cmd.ExecuteReader(
CommandBehavior.SequentialAccess)) {
char[] buffer = new char[8040]; // or some multiple (sql server page size)
while (reader.Read()) {
long dataOffset = 0, read;
while((read = reader.GetChars(colIndex, dataOffset, buffer, 0, buffer.Length)) > 0) {
// process "read"-many chars from "buffer"
dataOffset += read;
}
}
}

显然,对于xml,您可能需要通过 XmlReader生成 cmd.ExecuteXmlReader()

更新了关于LINQ的评论(现已删除):

要直接从LINQ-to-SQL使用 IDataReader,我希望可以得到的最接近的是 ctx.GetCommand(),并向它传递查询。然后,您将如上所述使用 ExecuteReaderExecuteXmlReader。我对EF不太了解...

如果给出一个失败的查询类型的示例,则可能有一些技巧-例如,如果要过滤或选择xml的子集,则可以在SQL / XML中做一些事情-也许在UDF中通过LINQ-to-SQL调用。

关于.net - 在SQL Server和.NET代码+ LINQ之间处理非常大的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/323413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com