win7下面没事在server 2008下就报错误

问题描述

using(PingmyPing=newPing()){myPing.PingCompleted+=newPingCompletedEventHandler(myPing_PingCompleted);stringpingIP="192.168."+j.ToString()+"."+i.ToString();myPing.SendAsync(pingIP,1000,null);}

win7下面没事在server2008下就报错误去掉using就没问题

解决方案

解决方案二:
报什么错误呢?运行的程序是一样的程序吗?(不是仅指这一段代码)
解决方案三:
是一样的程序一样的代码只是有没有using
解决方案四:
引用1楼starfd的回复:

报什么错误呢?运行的程序是一样的程序吗?(不是仅指这一段代码)

**************异常文本**************System.NullReferenceException:未将对象引用设置到对象的实例。在PcIpAddress.Form1.myPing_PingCompleted(Objectsender,PingCompletedEventArgse)**************已加载的程序集**************
解决方案五:
猜测如下你的ping注册了事件,需要等待执行结束的回传,然后你用了异步的方式,那么异步结束后就到了using执行边界,然后你的ping就被dispose了,这时候事件callback就找不到myPing这个对象了,你可以试着将SendAsync改为Send看有没有问题,至于你说的win7没事,2008就有问题,就不知道了
解决方案六:
引用4楼starfd的回复:

猜测如下你的ping注册了事件,需要等待执行结束的回传,然后你用了异步的方式,那么异步结束后就到了using执行边界,然后你的ping就被dispose了,这时候事件callback就找不到myPing这个对象了,你可以试着将SendAsync改为Send看有没有问题,至于你说的win7没事,2008就有问题,就不知道了

我改成send也不行但是确实在win7上就行在server2008上就不行我很是奇怪
解决方案七:
大家还没上班吗??大神们给看看啊!!!!!!!!!!!!
解决方案八:
先把using去掉看看,应该是这个using释放导致的问题
解决方案九:
win7和08本身差别不大,检查下是不是这两台机子其他配置不同,有没有安全软件对网络通讯的拦截,防火墙什么的
解决方案十:
引用7楼starfd的回复:

先把using去掉看看,应该是这个using释放导致的问题

using去掉就没问题了啊在那上面都可以运行啊但是我的内存涨的厉害!!
解决方案十一:
你用的异步myPing.SendAsync(pingIP,1000,null);还敢放在using里?win7正常只不过侥幸罢了异步方式一般都是在回调函数(事件)myPing_PingCompleted释放
解决方案十二:
还好你没说using又出惊天bug
解决方案十三:
引用10楼dongxinxi的回复:

你用的异步myPing.SendAsync(pingIP,1000,null);还敢放在using里?win7正常只不过侥幸罢了异步方式一般都是在回调函数(事件)myPing_PingCompleted释放

关键是怎么释放啊这是主要的啊
解决方案十四:
引用12楼bjgzxx的回复:

Quote: 引用10楼dongxinxi的回复:
你用的异步myPing.SendAsync(pingIP,1000,null);还敢放在using里?win7正常只不过侥幸罢了异步方式一般都是在回调函数(事件)myPing_PingCompleted释放

关键是怎么释放啊这是主要的啊

#10楼其实已经告诉你了。在myPing_PingCompleted中才能去调用Dispose()方法。
解决方案十五:
你其实要首先确定,你所谓的问题跟Dispose()方法真的相关吗?你又说你的内存“涨的厉害”是这个造成的,又说不这样根本就不能运行。说白了,你现在还根本不确定这是不是内存涨的原因,还仅仅只是在那里破坏式的猜测呢。引用9楼bjgzxx的回复:

Quote: 引用7楼starfd的回复:
先把using去掉看看,应该是这个using释放导致的问题

using去掉就没问题了啊在那上面都可以运行啊但是我的内存涨的厉害!!

解决方案:
一般来说,任何一个.netframework中的组件都会在GC时自动调用Dispose方法,因为组件父类的Dispose方法中本身就是这样写的publicvoidDispose(){this.Dispose(true);GC.SuppressFinalize(this);}protectedoverridevoidFinalize(){try{this.Dispose(false);}finally{base.Finalize();}}

所以不必要写using(){...}结构或者不必要调用Dispose方法时,不要画蛇添足去写。让GC执行的时候才去Dispose,这样能保证应用程序性能,不至于在你应用正忙的时候去多余地进行Dispose操作。有些地方必须写using{}结构,或者是直接调用Dispose方法,那是因为你知道Dispose里边具体的代码主要干什么事情,你确实必须立刻调用它(而不是几秒钟之后调用它)。如果不知道Dispose里边具体干了什么,或者你的问题跟本不是几秒钟之内不许调用Dispose方法的问题,那么就不要画蛇添足用自己的代码去调用Dispose。
解决方案:
或者你的问题跟本不是几秒钟之内不许调用Dispose方法-->或者你的问题跟本不是几秒钟之内必须调用Dispose方法有些博客上以讹传讹,说什么“既然拿不准要不要调用Dispose,那么就干脆总是调用Dispose方法吧”。这是误导的。因为Dispose方法中就算是如果要释放非托管资源,绝不是对软件系统没有影响的。在.net框架中它本来就是设计为在软件系统比较空闲时才启动GC,而GC运行时才去调用Dispose(false)。而假设你的Dispose中要是放什么托管资源,这更是用不着你去操心的,因为托管资源在GC时会自动如雪崩一样去关联着同时被释放,用不着你特意写代码去释放。如果你遇到所谓“内存”的问题,首先要掌握第一手证据,分析是不是你的几十个所谓的Ping对象就造成了你的问题。我手机上的微信占用了150M内存空间,QQ占用了180M空间。或许你遇到的问题根本就不是问题。手机软件尚且如此,而有些人却对pc机上.net应用程序占用20M内存就开骂了,这样的人就变成了专门来是黑微软、黑.net的人。
解决方案:
引用16楼sp1234_maJia的回复:

或者你的问题跟本不是几秒钟之内不许调用Dispose方法-->或者你的问题跟本不是几秒钟之内必须调用Dispose方法有些博客上以讹传讹,说什么“既然拿不准要不要调用Dispose,那么就干脆总是调用Dispose方法吧”。这是误导的。因为Dispose方法中就算是如果要释放非托管资源,绝不是对软件系统没有影响的。在.net框架中它本来就是设计为在软件系统比较空闲时才启动GC,而GC运行时才去调用Dispose(false)。而假设你的Dispose中要是放什么托管资源,这更是用不着你去操心的,因为托管资源在GC时会自动如雪崩一样去关联着同时被释放,用不着你特意写代码去释放。如果你遇到所谓“内存”的问题,首先要掌握第一手证据,分析是不是你的几十个所谓的Ping对象就造成了你的问题。我手机上的微信占用了150M内存空间,QQ占用了180M空间。或许你遇到的问题根本就不是问题。手机软件尚且如此,而有些人却对pc机上.net应用程序占用20M内存就开骂了,这样的人就变成了专门来是黑微软、黑.net的人。

你说的我明白第一点:如果我不加using运行起来没有问题只是你运行一遍我的代码内存就会增加一直增加不会释放一直到死机第二点:加using那么在64win7上没问题在,在server2008上就出我贴的错误信息我就是不明白为什么出这个错误第三点:加using在64win7内存会自动释放不管运行多少遍总会保持在一个合理水平!!!!!!
解决方案:
都安装了.net环境3.5和4.0的
解决方案:
我来膜拜大神的
解决方案:
using(PingmyPing=newPing()){myPing.PingCompleted+=newPingCompletedEventHandler(myPing_PingCompleted);stringpingIP="192.168."+j.ToString()+"."+i.ToString();myPing.SendAsync(pingIP,1000,null);}这么用确实挺奇葩的。BUG肯定一堆。using(PingmyPing=newPing())using之后的东西要释放。你确要在这个地方注册一个事件,这个事件啥时候触发呢,如果你ping失败了,要延迟好久,这时候你的using里面的东西都已经释放了,肯定报一堆问题。
解决方案:
引用20楼zanfeng的回复:

using(PingmyPing=newPing()){myPing.PingCompleted+=newPingCompletedEventHandler(myPing_PingCompleted);stringpingIP="192.168."+j.ToString()+"."+i.ToString();myPing.SendAsync(pingIP,1000,null);}这么用确实挺奇葩的。BUG肯定一堆。using(PingmyPing=newPing())using之后的东西要释放。你确要在这个地方注册一个事件,这个事件啥时候触发呢,如果你ping失败了,要延迟好久,这时候你的using里面的东西都已经释放了,肯定报一堆问题。

你说的没错但是我用win7不报错并且运行的很好
解决方案:
顶一个周末没人啊!!!!!!!!!
解决方案:

解决方案:
再顶下快过年了真冷清
解决方案:
你确认过在win7上complete都执行了吗?
解决方案:
引用3楼bjgzxx的回复:

Quote: 引用1楼starfd的回复:
报什么错误呢?运行的程序是一样的程序吗?(不是仅指这一段代码)

**************异常文本**************System.NullReferenceException:未将对象引用设置到对象的实例。在PcIpAddress.Form1.myPing_PingCompleted(Objectsender,PingCompletedEventArgse)**************已加载的程序集**************

擦,忽略了一个事实,这个NullReferenceException是发生在回调里的。。。。你都没debug过是哪个变量的问题吗?
解决方案:
引用25楼shingoscar的回复:

你确认过在win7上complete都执行了吗?

我非常确认在win7上没事我在win7上做的winserver上没开发环境不能调试
解决方案:
我也非常肯定的肯定是这段代码出的问题因为只要去掉using在winserver上就没事
解决方案:
看了半天,感觉都还在猜。代码再贴多一点。你说不用using内存爆,不知道是不是这个+=被执行了多次?还是说出了局部方法就释放了myPing.PingCompleted+=newPingCompletedEventHandler(myPing_PingCompleted);

解决方案:
引用29楼u013421223的回复:

看了半天,感觉都还在猜。代码再贴多一点。你说不用using内存爆,不知道是不是这个+=被执行了多次?还是说出了局部方法就释放了myPing.PingCompleted+=newPingCompletedEventHandler(myPing_PingCompleted);

privatevoidmyPing_PingCompleted(objectsender,PingCompletedEventArgse){//StringBuildersb=newStringBuilder();if(e.Reply.Status==IPStatus.Success){if(e.Reply.Address.ToString().Trim()!=""){this.listBoxAddrs.Items.Add(e.Reply.Address.ToString());//stringmac=GetMacAddress(e.Reply.Address.ToString());//sb.Append(""+mac);num++;}}//this.txtAddrs.Text+=sb.ToString();this.lbIPs.Text="在线IP数:"+num.ToString();}

解决方案:
请多指教谢谢
解决方案:
引用28楼bjgzxx的回复:

我也非常肯定的肯定是这段代码出的问题因为只要去掉using在winserver上就没事

堆栈已经很明显了,是myPing_PingCompleted写的有问题你可以贴出来看看还是你觉得你所谓的经验比调试信息更加靠谱?
解决方案:
引用32楼shingoscar的回复:

Quote: 引用28楼bjgzxx的回复:
我也非常肯定的肯定是这段代码出的问题因为只要去掉using在winserver上就没事

堆栈已经很明显了,是myPing_PingCompleted写的有问题你可以贴出来看看还是你觉得你所谓的经验比调试信息更加靠谱?

不是我经验靠谱不靠谱的是我没有winserver的开发环境我不能在server的环境下调试还是请大神帮忙!!!
解决方案:
问题应该是出在myPing_PingCompleted里面,当你异步执行回来触发这个事件的时候e对象应该是已经被释放了,所以报null引用。目测是这样,未经过测试
解决方案:
如果你可以发debug版本,就能看到具体行数否则可以把每一个调用拆成单个函数,这样也能查明问题另外你可以把e.Error写进日志看看就现在的条件,我猜测可能是e.Reply为空,从Ping的代码看如果异步发送时出现异常,就会出现这个问题

时间: 2024-11-01 00:15:48

win7下面没事在server 2008下就报错误的相关文章

DB2 ESE 9.1在Windows Server 2008下出现无法新建数据库的情况及解决办法

DB2 Enterprise Server Edition(DB2 ESE)9.1在Windows Server 2008 下出现无法新建数据库的情况及解决办法 在安装有,DB2 9.1版本的Windows Server 2008 上面,使用默认的安装方式导致无法创建数据库,相关的错误提示: "SQL3012C 发生系统错误(原因码= "").无法处理后续的SQL 语句.SQLSTATE=58005". 通过分析日志"%programfiles%\IBM\

Windows Server 2008下为系统分区“减负”

计算机系统运行时间一长,其运行速度将会明显变慢,并且时不时地还出现系统分区空间不够用的提 示,对于这样的现象,相信几乎所有的人都深有感触!造成这种现象的主要原因就是系统分区"不堪重负 ",想办法为系统分区"减负",已经变得刻不容缓.不同的系统环境下,为系统分区"减负"的操作有 时会不一样:现在,本文就为各位朋友介绍Windows Server 2008下为系统分区"减负"的秘籍! 1.不让上网垃圾"拖累"系

windows server 2008下的共享的配置

简单的说,windows server 2008下的共享的配置就是可以利用它使得基于一个基础Web站点快速部署 大量相同的Web站点.举个简单的例子,比如有两台IIS服务器,第一台的IIS有个网站名称为test,第2台 IIS没有网站,我们配置好共享配置以后,通过刷新第2台IIS服务器就出来第一台名称为test网站了,并 且不管你在任何一台服务器更改配置,都会自动同步到另一台的IIS服务器.原因很简单,因为他们使用 的是同一个配置文件,这就是共享的配置. 听起来很奇妙吧,下面就让我们通过简单的实

Windows Server 2008下的网络排错

Window Server 2008作为服务器平台,通常会部署众多服务,而这些服务往往与网络相关.服务的复杂性造成了网络的复杂性,因此Windows Server 2008下的网络排错显得比较麻烦.其实,只要善用运用其提供的工具和相关命令网络排错也可以很简单.下面笔者和大家分享 Windows Server 2008下的网络排错几个技巧和相关经验. 1.利用"Windows 网络诊断"工具解决本地连接问题 诸如连接消失.连接受限.出现感叹号等与"本地连接"相关的故障

强化Windows Server 2008下的打印管理

打印管理从来都是Windows Server服务管理的重要方面,在Windows Server 2008中针对打印管理做了很多改进,也提供了不少新功能.本文将与大家分享笔者在利用Windows Server 2008进行打印管理方面的三个技巧,希望对大家有所帮助. 1.添加打印机或打印服务器到打印管理控制台 打印管理控制台是我们在Windows Server 2008下管理打印机和打印服务器的首选工具.当我们在Windows Server 2008中安装完打印服务后,就可以利用打印管理控制台进行

Windows Server 2008 下ASP程序连接ORACLE数据库驱动错误

今天开发那边升级.改造系统过程中,在测试服务器碰到关于ASP程序连接ORACLE数据库的小问题,虽然是小问题,但是整起来真要命啊,花了不少时间,主要是ASP程序啊,这种上古神器,哥还是当年毕业的时候弄过半年,现在基本上忘得七七八八了. 环境介绍:在系统Windows Server 2008下部署了ASP应用程序,IIS为7.0版本,ORACLE 客户端为 11g,测试连接数据库报错的情况如下: 数据库链接方式如下: application("Connection_ConnectionString

windows server 2008 安装memcache报错

问题描述 windows server 2008 安装memcache报错 windows server 2008上安了memcache 低版本的1.21,想换成高版本的怎么不行呢?,先停止,然后卸载,再运行新版本的时候安不了, 因为服务器上的PHP版本是5.3.13,所以php_memcached.dll这个文件很不好找,目前没找到合适的,服务器上memcache已经启动,就是phpinfo里不显示,也不能用,先求解怎么升级memcache,再求解希望大神给个php5.3.13版本的dll文件

SQL Server 2008安装提示1608错误及故障排除方法

SQL Server 2008安装提示1608错误及故障排除方法 一直使用SQL Server 2000 ,觉得安装方便快速,便不想升级到2005/2008.今天有个项目突然要用到2008,于是就在Windows7下安装了一下,没想到碰到一个1608错误,中间提示一大堆信息,上网搜索了一下,也好多遇到过这个错误,试了网上的方法都没有成功,郁闷中搜索到一个国外的方法:     SQL Server 2008 Setup fails on Windows 7 Enterprise, Error co

sql server 2008 r2 安装报错

问题描述 sql server 2008 r2 安装报错 请问解决方法 解决方案 重新下载一个sqlserver安装文件 解决方案二: 是不是你的安装文件有问题?从新下载个事实看,另外确定好位数 解决方案三: 找不到指定文件,建议换个安装盘