各位DX:我有一个根据IP获得局域网内计算机名称的程序,但执行后速度太慢,请指点:

dazhu2 2004-08-21 10:45:56
private void button1_Click(object sender, System.EventArgs e)
{
this.button1.Enabled=false;
string mystartIP="192.168.0.";
string myip;
int s,end;
string name,mymac;

for(s=1;s<=255;s++)
{
myip=mystartIP +s.ToString();

//转换IP地址
IPAddress myscanip=IPAddress.Parse(myip);
try
{
System.Windows.Forms.Application.DoEvents();

IPHostEntry myscanhost=Dns.GetHostByAddress(myscanip);

name=myscanhost.HostName.ToString();
this.listBox1.Items.Add(myip +" " +name);



}
catch(Exception myerror)
{

}

}


}
执行后,可以根据IP得到局域网中其他计算机的名称,但速度太慢,请指教!!
...全文
190 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
速马 2004-10-09
  • 打赏
  • 举报
回复
枚举局域网机器名,这么写不太合理吧
IPHostEntry myscanhost=Dns.GetHostByAddress(myscanip);这一句在连接失败时会抛出异常,当然慢

使用Windows API:
http://www.yesky.com/20011124/206738.shtml
Reeezak 2004-10-09
  • 打赏
  • 举报
回复
IPHostEntry myscanhost=Dns.GetHostByAddress(myscanip);
就是这里的问题
如果该IP地址正在使用,那么没有问题,如果没有使用的话,就会像楼上的说的那样抛出异常,不过,就算立刻抛出异常也不会有多大影响的,原因自然是可想而知的。慢的原因主要是因为,该IP并不在网络上的时候(那台机器没有开或是别的什么原因)就会反复的查找,等到实在找不到了的时候才抛一个异常出来。
这个问题用多线程做的话,就可以解决,不过,你需要用到委托以实现回调。另外,用线程池也会方便很多

MSDN中文网站上有一个例子,就是这个程序,没有多线程,速度奇慢,像死机一样~~~
代码写得很不好,估计那些代码是用NOTEPAD写的,大小写都不分的
jkflyfox 2004-08-21
  • 打赏
  • 举报
回复
是很慢,我也弄过。
本身就是255次循环,而且每次都会搜索网络获取机器名,本身就很慢。
不知道有没有什么好方法。
dazhu2 2004-08-21
  • 打赏
  • 举报
回复
up
dazhu2 2004-08-21
  • 打赏
  • 举报
回复
UP
dazhu2 2004-08-21
  • 打赏
  • 举报
回复
UP

110,570

社区成员

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

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

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