我序列化一个对象以后怎么释放资源呢。

diegod 2013-02-04 01:50:04
我序列化一个对象以后怎么释放资源呢。好大呀,因为对象比较大,序列化以后不知道为什么不释放,两次序列化,程序就内存溢出崩溃了。。纠结,就35分了,全给了。
...全文
290 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
showjim 2013-02-05
  • 打赏
  • 举报
回复
要么只能用流处理,要么排队处理
qldsrx 2013-02-05
  • 打赏
  • 举报
回复
用流处理吧,分段压缩发送数据,如果是WCF,直接使用内置的GZipEncoder(演示代码里)
diegod 2013-02-04
  • 打赏
  • 举报
回复
还有因为我这个是服务器端,客户端需要请求服务器端下载一些数据数据库包,因为这些包都很大。用户一同时请求就报OutOfMemoryException错误
diegod 2013-02-04
  • 打赏
  • 举报
回复
直接作为参数使用了 var rtnbytes = CompressByte(SerializeObject(obj)); Console.WriteLine("压缩后包大小是" + rtnbytes.Length.ToString()); callback.OnHistoryMarkData(rtnbytes); rtnbytes = null;
  • 打赏
  • 举报
回复
引用 8 楼 claymore1114 的回复:
SerializeObject返回值 byte[] read ,最终 这个read怎么样了? 就是 调用这个方法的方法里面是怎么处理的? 引用对象,有引用就不会回收的
byte[] read的后续处理有没有。这个得释放。
claymore1114 2013-02-04
  • 打赏
  • 举报
回复
SerializeObject返回值 byte[] read ,最终 这个read怎么样了? 就是 调用这个方法的方法里面是怎么处理的? 引用对象,有引用就不会回收的
diegod 2013-02-04
  • 打赏
  • 举报
回复
怎么办啊怎么办啊怎么办啊
diegod 2013-02-04
  • 打赏
  • 举报
回复
这是我的方法 public static byte[] SerializeObject(object pObj) { if (pObj == null) return null; System.IO.MemoryStream _memory = new System.IO.MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(_memory, pObj); _memory.Position = 0; byte[] read = new byte[_memory.Length]; _memory.Read(read, 0, read.Length); _memory.Close(); _memory.Dispose(); return read; }
diegod 2013-02-04
  • 打赏
  • 举报
回复
引发类型为“System.OutOfMemoryException”的异常。 就是这个异常
phommy 2013-02-04
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
本帖最后由 bdmh 于 2013-02-04 13:57:29 编辑 把流close,并设为null,然后可以调用GC立即回收
把序列化那块单独写个静态函数实现,这样1楼说的这两件事系统就自动替你做了 能用局部变量的就不要用成员变量,用局部变量的话“设为null”也可以省。我是从微软对GC.KeepAlive的说明里意识到这点的
  • 打赏
  • 举报
回复
是不是没及时关闭流?
qldsrx 2013-02-04
  • 打赏
  • 举报
回复
序列化过程中是没有内存泄漏的,只要将中间过程产生的内存流关闭即可释放。
bdmh 2013-02-04
  • 打赏
  • 举报
回复
把流close,并设为null,然后可以调用GC立即回收

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧