委托异步调用 GC.collect()方法无法释放内存

花开花折 2014-09-06 11:38:12
现写一自动化控制软件,涉及到视觉处理。视觉处理部分代码包含在posvision()方法中,(视觉处理部分包含大量引用类型,处理完成后,引用类型有Dispose(),在代码的最后也有加GC.collect()来强制释放内存);

现发现当调用委托.invoke(image,null,null)方法时,程序内存能够释放。当调用委托.begininvoke(image,null,null)方法时,程序内存无法释放,每次调用委托处理 视觉部分时内存会以12M的速度增加。


现想请教各位 GC.collect()为何在委托的异步调用时没有启到作用???????



谢谢。
...全文
762 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
花开花折 2014-09-10
  • 打赏
  • 举报
回复
怎么还是没有人啊,高手在那啊?
花开花折 2014-09-09
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
“调用委托.invoke(image,null,null)方法、调用委托.begininvoke(image,null,null)方法” 你确定后者的定义就是这样只有三个参数吗? 只有在异步处理完毕的回调中,你才能进行 Dispose 等处理。如果在这条语句之后就进行 Dispose 等等处理动作,你不怕 begininvoke 本身执行时就异常吗?
对了,上面调用委托.invoke(image)方法时只有一个参数,即image参数。 上面写错了,不好意思。
花开花折 2014-09-09
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
“调用委托.invoke(image,null,null)方法、调用委托.begininvoke(image,null,null)方法” 你确定后者的定义就是这样只有三个参数吗? 只有在异步处理完毕的回调中,你才能进行 等处理。如果在这条语句之后就进行等等处理动作,你不怕 begininvoke 本身执行时就异常吗?
我确定异步委托调用只有三个参数,即委托.begininvoke(image,null,null)。我没有进行异步处理完毕后的回调。 我把视觉处理部分及Dispose部分全部写在委托调用的方法中(posvision()方法)。 我的想法就是当视觉处理完成后接着就处理Dispose部分,当Dispose部分处理完成后,就用GC.collect()进行回收。 谢谢。
  • 打赏
  • 举报
回复
“调用委托.invoke(image,null,null)方法、调用委托.begininvoke(image,null,null)方法” 你确定后者的定义就是这样只有三个参数吗? 只有在异步处理完毕的回调中,你才能进行 Dispose 等处理。如果在这条语句之后就进行 Dispose 等等处理动作,你不怕 begininvoke 本身执行时就异常吗?
threenewbee 2014-09-06
  • 打赏
  • 举报
回复
GC.Collect()根本就没有释放“内存”的功能,你代码有内存泄漏的话,你调用死了当然也没用。

111,098

社区成员

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

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

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