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

diegod 2013-02-04 01:50:04
我序列化一个对象以后怎么释放资源呢。好大呀,因为对象比较大,序列化以后不知道为什么不释放,两次序列化,程序就内存溢出崩溃了。。纠结,就35分了,全给了。
...全文
217 13 点赞 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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立即回收
  • 打赏
  • 举报
回复
相关推荐
发帖
C#
加入

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2013-02-04 01:50
社区公告

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