在C#中序列化数据表会占用大量内存-如何改进这一点
概述在C#中序列化数据表会占用大量内存-如何改进这一点,c#,mysql,.net,serialization,datatable,C#,Mysql,.net,Serialization,Datatable,概述 我有一些类似于数据库请求代理的东西。当将结果发送回客户端时,发送的数据变得非常大-我需要对此进行改进,否则我可能会耗尽内存,整个应用程序将崩溃 以下是我的工作 -客户端调用服务器 -服务器执行请求并将数据从MySql数据库提取到DataTable -接下来,我通过BinaryFormatter -生成的字节流通过TCP套接字发送回客户端 问题 现在发送的序列化数据(以及内存使用率)非常高,特别是当涉及到要发送的列和行负载的表时。这可能会增加到几百兆字节 据我所知,将XML数据序列化为通过T
我有一些类似于数据库请求代理的东西。当将结果发送回客户端时,发送的数据变得非常大-我需要对此进行改进,否则我可能会耗尽内存,整个应用程序将崩溃 以下是我的工作
-客户端调用服务器
-服务器执行请求并将数据从MySql数据库提取到
DataTable
-接下来,我通过
BinaryFormatter
-生成的字节流通过TCP套接字发送回客户端 问题
现在发送的序列化数据(以及内存使用率)非常高,特别是当涉及到要发送的列和行负载的表时。这可能会增加到几百兆字节 据我所知,将XML数据序列化为通过TCP连接发送的数据会带来很大的开销 我的问题
有没有一种方法可以减少要发送的数据,例如使用将被序列化的不同对象、使用不同的方法序列化数据或其他有助于减少内存使用的方法?您可以做一些事情 1.)通过删除任何不必要的列来减小数据表的大小 2.)您可以尝试使用不同的对象,例如generic
List
,因为DataTable中有很多信息
3.)更改体系结构,不发送全部数据,而是执行分页-请参阅如何执行分页谢谢您的建议。我将尝试建议2)和3),并让您知道结果。1) 只会将问题转发到发送较长表的情况。3)也会退出选项,因为数据需要稍后整体处理。我仍然可以尝试将DataTable放入另一个对象并序列化该对象。我们将看看这是否有帮助。或多或少我尝试了一些避免内存问题的方法。我获取DataTable,然后逐行(或20行左右的块)序列化并发送它。在客户端,我重新聚合了所有内容,能够一次性发送整个数据表而不需要那么多内存。这不完全是你的答案,但受到了你关于分页的想法的启发,所以我无论如何都会接受你的答案。谢谢-是的,分页将基于你的上下文,但做得很好!