c# 内存泄露,我应该怎么做?

candys_yang 2015-11-09 02:46:32
前两天为公司编写了一个 断网监测 的软件。

但是,跑了一个周末后才发现,小小的工具竟然占用500多M的内存。

这让我有点惊讶。

不就是循环发个ping包嘛……

我琢磨了很久,依然不知道是为什么有内存泄露。

还望各位前辈指点,源代码我直接放到附件里。

开发环境:VS2015
.net :2.0



http://pan.baidu.com/s/1o6092Oi
...全文
1189 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdcjk 2015-11-12
  • 打赏
  • 举报
回复
用工具测一下,是哪里的内存增长这不是内存泄露,而是你没有释放资源
孤独de猫 2015-11-12
  • 打赏
  • 举报
回复
将 pingnet()这个方法中的 Ping ping = new Ping() 换个类的私有变量 ,没有必要,执行一次就 new 一个。
xuzuning 2015-11-11
  • 打赏
  • 举报
回复
这不是内存泄露,而是你没有释放资源
苏璃 2015-11-11
  • 打赏
  • 举报
回复
电脑求释放,万恶的你
  • 打赏
  • 举报
回复
引用 3 楼 u014427515 的回复:
try 不是和 using 类似的吗? try 语句结束后,资源就会像 using 语句块那样释放掉吗?
1.谁说的try和using类似。。。。 不是长得像 xx{}的写法就类似。。。 2.用try的话,要在finally块中手动释放,不然你就用using
  • 打赏
  • 举报
回复
引用 8 楼 u011710947 的回复:
[quote=引用 3 楼 u014427515 的回复:] try 不是和 using 类似的吗? try 语句结束后,资源就会像 using 语句块那样释放掉吗?
1.谁说的try和using类似。。。。 不是长得像 xx{}的写法就类似。。。 2.用try的话,要在finally块中手动释放,不然你就用using[/quote] 还有这根本不是内存泄漏。。
  • 打赏
  • 举报
回复
引用 3 楼 u014427515 的回复:
[quote=引用 楼主 u014427515 的回复:] 前两天为公司编写了一个 断网监测 的软件。 但是,跑了一个周末后才发现,小小的工具竟然占用500多M的内存。 这让我有点惊讶。 不就是循环发个ping包嘛…… 我琢磨了很久,依然不知道是为什么有内存泄露。 还望各位前辈指点,源代码我直接放到附件里。 开发环境:VS2015 .net :2.0
http://pan.baidu.com/s/1o6092Oi
try 不是和 using 类似的吗? try 语句结束后,资源就会像 using 语句块那样释放掉吗?[/quote] 你在哪里看到的,跟下面的代码类似,重要的是用finally块 Ping ping = null; try { ping = new Ping(); } finally { if(ping != null) ping.Dispose(); } 而且如果你是监测自己的网络状态,完全没必要轮询,处理事件通知就行 除非你还需要监测到服务器的连接才需要去轮询
facelessvoidhj 2015-11-09
  • 打赏
  • 举报
回复
用工具测一下,是哪里的内存增长 ANTS Memory Profiler 7
candys_yang 2015-11-09
  • 打赏
  • 举报
回复
引用 楼主 u014427515 的回复:
前两天为公司编写了一个 断网监测 的软件。 但是,跑了一个周末后才发现,小小的工具竟然占用500多M的内存。 这让我有点惊讶。 不就是循环发个ping包嘛…… 我琢磨了很久,依然不知道是为什么有内存泄露。 还望各位前辈指点,源代码我直接放到附件里。 开发环境:VS2015 .net :2.0
http://pan.baidu.com/s/1o6092Oi
try 不是和 using 类似的吗? try 语句结束后,资源就会像 using 语句块那样释放掉吗?
  • 打赏
  • 举报
回复
顺便说一句,那帖子中用到了API,其实没必要,.Net封装好了NetworkInterface.GetIsNetworkAvailable() 还有NetworkInterface.GetAllNetworkInterfaces()以及NetworkInterface.OperationalStatus可以让你知道每块网卡的状态 在此基础上,你再借助ping或者httpwebrequest或者socket去测试服务器
  • 打赏
  • 举报
回复
即使要用ping,也应该用using块包起来 其实压根就用不着去轮询,操作系统设计有相应的事件通知,.Net已经将其封装为委托 using System.Net.NetworkInformation; NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged); http://www.cnblogs.com/94cool/archive/2009/08/14/1546286.html

110,549

社区成员

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

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

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