为什么我的多线程FTP站点搜索程序这么慢???

ATField 2002-04-11 09:41:34
我写了一个多线程FTP实用程序,有搜索功能,但即使同时开500个
线程同时搜索也远远比不上宁外一个软件的搜索速度,下面是线程的源代码,
还请高手不吝赐教:

DWORD WINAPI SearchFtpProc( LPVOID lpParam )
{
LPSEARCHFTPPROCPARAM lpProcParam = (LPSEARCHFTPPROCPARAM) lpParam;

// initialization
CString strAddress;
BOOL bSuccess;
for( DWORD i = lpProcParam->dwIPBegin; i <= lpProcParam->dwIPEnd; i ++ )
{
strAddress.Format(
"ftp://%u.%u.%u.%u",
(i & 0xff000000)>>24, (i & 0x00ff0000)>>16,
(i & 0x0000ff00)>>8, (i & 0x000000ff) );

bSuccess = TRUE;
TRY {
AfxParseUrl(....)
CFtpConnection *pConnection = g_pInternetSession>GetFtpConnection(....)
pConnection->Close();
delete pConnection;

}
CATCH( CInternetException, e )
{
bSuccess = FALSE;
}
END_CATCH
if( bSuccess )
// add the URL to a list control
}
}

我把部分代码略去了,不过应该不影响理解。
是不是最好用API重写?但我试着把GetFtpConnection()自己再写了一遍,
但依旧很慢。请指教。
...全文
110 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ATField 2002-04-15
  • 打赏
  • 举报
回复
我成功了!!!!!
其实问题不在CFtpConnection有多慢,事实上根本不慢,尤其在调整了timeout值之后。
问题在于线程的调度。我有一个WatcherProc用于监视各个线程是否结束,可能是此线程(WatchProc()也是一个线程)持续占用CPU,我在研究了VC的mtgdi例子之后给WatchProc()及SearchFtpProc()中加入了Sleep(0)用于告诉系统把时间片分给其他线程,尤其在WatcherProc()之中加了Sleep(0)后性能有了飞跃!!
我在此把自己的经验写出来与大家共同探讨,同时也感谢各位的指教。
现在给分。
jiaozonglu 2002-04-12
  • 打赏
  • 举报
回复
真是天外有天,人外有人。
ATField 2002-04-12
  • 打赏
  • 举报
回复
不好意思,但是已经有过这样一个程序了,开500个线程,而且极快,别人写的,没有源码。
VSaber 2002-04-12
  • 打赏
  • 举报
回复
windows调度线城并不非常优秀,98下一个进程超过16个线程效率就开始下降,2000/nt之类没看到具体的数目,但是500个线程肯定已经过了峰值了吧!
ATField 2002-04-12
  • 打赏
  • 举报
回复
我刚才试着改了一下timeout值,发现效果不明显,有个人写的同样程序速度是我的4倍多,看来只有用WinSock从底层写了。
请问有源代码吗?或者FTP传输协议的详细资料也行。
解决后马上给分。
多谢。
Tasehouny 2002-04-12
  • 打赏
  • 举报
回复
并不是开越多的线程,效率就越高,因为线程间的调度也是要耗资源的。

你可以用winsockAPI,试一试!
Guanghuan 2002-04-12
  • 打赏
  • 举报
回复
要改善的话,要么用socket自己从底层实现,
要么改CInternetSession的Option的timeout
Guanghuan 2002-04-12
  • 打赏
  • 举报
回复
GetFtpConnection()连接超时如果比较长的话,只要有一个失败就能把你的程序拖得很慢。
ATField 2002-04-12
  • 打赏
  • 举报
回复
???
为什么没人理我??-_-

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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