【发布时间】:2013-11-26 05:04:23
【问题描述】:
在调用 . GetXml() 在我的数据集上。
当我阅读here (last paragraph) 时,这可以通过使用二进制表示而不是 xml 来克服,这听起来很合乎逻辑。 因此,我将数据集上的 RemotingFormat 属性设置为二进制,但问题仍然存在。
我仔细查看了 GetXml 实现,似乎没有基于 RemotingFormat 的区别。相反,我发现 GetXmlSchemaForRemoting 考虑了 RemotingFormat,但是这个方法是内部的,所以我不能从外部调用它。它由公共 GetObjectData 调用的私有 SerializeDataSet 调用。 GetObjectData 本身似乎用于自定义序列化。
如何对我的数据集进行二进制(反)序列化?或者至少调用 GetXml 而不抛出异常?我是否忽略了任何数据集属性?
【问题讨论】:
-
当然有例外,但我认为一般来说,如果你有 250k 的任何东西并且你看到 OutOfMemoryExceptions,你应该重新考虑你的方法。
-
在内存中返回并保留 250K 行是一个相当糟糕的设计。听起来您的 real 问题是如何将这些行导出到某个文件?还是发给别人?你真正想做什么?
-
看到你不能一次看到所有的记录,对吧?因此,请尝试采用分页方法,而不是一次获取所有记录。不确定,但您也可以尝试以大数据块的形式获取数据。
-
@Panagiotis Kanavos:一项工作正在请求数据以对其进行处理。正如我所写的,从数据库中获取块是没有问题的,但我对另一种解决方案感兴趣(并且想知道为什么二进制序列化的构建不起作用)。我同意这是很多数据,可能是 600mb,但这仍然应该是可序列化的。
-
正如所有其他人所说,您的做法是错误的。在内存中加载 600MB 并尝试立即编写它可能需要很少的代码,但无法扩展。如果您没有绑定到数据集架构(无论如何都不是非常可互操作),您应该使用 DataReader 读取行并使用 XmlWriter 写入它们。或者使用 SSIS 自动化整个过程。这适用于任何数据库,任何语言。如果您使用 IBM DB2 和 C++ 或 Java,您的运气不会更好
标签: serialization dataset asp.net-3.5