Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中序列化数据表会占用大量内存-如何改进这一点_C#_Mysql_.net_Serialization_Datatable - Fatal编程技术网

在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行左右的块)序列化并发送它。在客户端,我重新聚合了所有内容,能够一次性发送整个数据表而不需要那么多内存。这不完全是你的答案,但受到了你关于分页的想法的启发,所以我无论如何都会接受你的答案。谢谢-是的,分页将基于你的上下文,但做得很好!