在C#中序列化DataTable会占用大量内存 - 如何改进此

时间:2015-12-17 12:52:36

标签: c# mysql .net serialization datatable

常规
我有点像数据库请求的代理。将结果发送回客户端时,发送的数据变得非常大 - 我需要改进这一点,否则我可能会耗尽内存而整个应用程序都会崩溃。

这就是我的工作
- 客户端呼叫服务器
- 服务器执行请求并将数据从MySql数据库提取到DataTable
- 接下来,我通过DataTable来序列化BinaryFormatter - 生成的字节流通过TCP套接字

发送回客户端

问题
现在发送的序列化数据(以及内存使用情况)非常高,特别是涉及要发送的列和行的负载的表时。这可能会增加几百兆字节。

据我所知,XML数据的大量开销被序列化为我通过TCP连接发送的数据。

我的问题
有没有办法减少要发送的数据,比如使用将被序列化的不同对象,使用不同的方法来序列化数据或其他任何有助于减少内存使用的方法?

1 个答案:

答案 0 :(得分:1)

你可以做几件事。

1。)通过删除任何不必要的列来减小数据表的大小。

2。)您可以尝试使用其他对象,例如通用List<T>,因为DataTable上有很多信息。

3。)更改体系结构,不再发送整个数据但执行分页 - 请参阅https://bytes.com/topic/asp-net/answers/341151-ado-net-sql-server-data-paging如何执行分页