COM组件运行速度问题
     我做了一个普通程序和一个组件,用来查询域名信息用的.结果是普通程序只需2秒就可以,组件程序用了30秒以上,还经常不能查询出结果来.
普通程序代码如下:
#include "stdafx.h"
#include <stdlib.h>
#include <winsock.h>
int main(int argc, char* argv[])
{
	SOCKET sock;
	struct sockaddr_in server;
	struct hostent *hp;
	char buf[1025];
	WORD wVersion;
	WSADATA wsaData;
	int err;
	int iRecv;
	char domain[1024];
	if (argc<2){
		printf("Use \n CsWhois  DomainName\n\n");
		return 0;
	}
	strcpy(domain,argv[1]);
	strcat(domain,"\n");	
	wVersion = MAKEWORD(2,0);  //版本号
	err=WSAStartup(wVersion,&wsaData); //初始化
	sock = socket(AF_INET,SOCK_STREAM,0); //定义一个Socket
	if(sock<0){ //出错处理
		perror("opening stream socket");
		return 1;
	}
	server.sin_family = AF_INET;
	hp = gethostbyname("whois.networksolutions.com");	
	if (hp==0){
		fprintf(stderr,"%s Unknow host \n",argv[1]);
		return 2;
	}
	memcpy((char *)&server.sin_addr,(char *)hp->h_addr ,hp->h_length);//构造服务器地址
	server.sin_port=htons(43); //构造服务器端口
	if (connect(sock,(struct sockaddr *)&server,sizeof(server))<0){ //连接
		perror("connect stream socket!");
		return 3;
	}
	if (send(sock,domain,lstrlen(domain),MSG_DONTROUTE)<0){//发送
		perror("sending on stream socket!");
		return 4;
	}
	
	iRecv=recv(sock,buf,1024,0);//接收
	while(iRecv>0){
		buf[iRecv]='\0';
		printf("%s\n",buf);
		iRecv=recv(sock,buf,1024,0);
		if( iRecv== SOCKET_ERROR) {			
			break;
		}
	}
	closesocket(sock);//关闭
	WSACleanup();//清除
	return 0;
}
COM组件代码:
STDMETHODIMP CWhoIs::QueryDomain(BSTR DomainName, BSTR * pVal)
{
	// TODO: Add your implementation code here
	WriteLogFile("Query Start!");
	USES_CONVERSION;
	SOCKET sock;
	struct sockaddr_in server;
	struct hostent *hp;
	TCHAR buf[1025];
	WORD wVersion;
	WSADATA wsaData;
	int err;
	int iRecv;
	LPTSTR domain;
	TCHAR *tcBuf;
	domain = W2A(DomainName);
	lstrcat(domain,_T("\n"));
	wVersion = MAKEWORD(2,0);  //版本号
	err=WSAStartup(wVersion,&wsaData); //初始化
	sock = socket(AF_INET,SOCK_STREAM,0); //定义一个Socket
	if(sock<0){ //出错处理
		m_ErrorMsg = BSTR("Create Socket Error!");
		return S_FALSE;
	}
	server.sin_family = AF_INET;
	WriteLogFile("Init!");
	hp = gethostbyname("whois.networksolutions.com");
	WriteLogFile("gethostbyname!");
	if (hp==0){
		m_ErrorMsg = BSTR("Can Not Find whois.networksolutions.com!");
		closesocket(sock);//关闭
		WSACleanup();//清除
		return S_FALSE;
	}
	memcpy((char *)&server.sin_addr,(char *)hp->h_addr,hp->h_length);//构造服务器地址
	server.sin_port=htons(43); //构造服务器端口
	WriteLogFile("Connect Start!");
	if (connect(sock,(struct sockaddr *)&server,sizeof(server))<0){ //连接
		m_ErrorMsg = BSTR("Can Not Connect whois.networksolutions.com!");
		closesocket(sock);//关闭
		WSACleanup();//清除
		return S_FALSE;
	}
	WriteLogFile("Connect End!");
	if (send(sock,domain,lstrlen(domain),MSG_OOB)<0){//发送
		m_ErrorMsg = BSTR("Sending Error!");
		closesocket(sock);//关闭
		WSACleanup();//清除
		return S_FALSE;
	}	
	WriteLogFile("Send End!");
	tcBuf=(TCHAR *)malloc(10 * sizeof(TCHAR));
	lstrcpy(tcBuf,_T(""));
	WriteLogFile("Receive start!");
	iRecv=recv(sock,buf,1024,0);//接收
	WriteLogFile("Receive End!");
	if (iRecv<=0) {
		int i;
		char buffer[20];
		i = WSAGetLastError ();
		_itoa( i, buffer, 10 );
		WriteLogFile(buffer);
	}
	while(iRecv>0){
		WriteLogFile("Loop start!");
		buf[iRecv]='\0';
		tcBuf = (TCHAR *)realloc(tcBuf,sizeof(TCHAR)*(lstrlen(buf)+lstrlen(tcBuf)+10));
		WriteLogFile("realloc!");
		if (tcBuf==NULL){
			free(tcBuf);
			closesocket(sock);
			WSACleanup();
			WriteLogFile("Fail!");
			return S_FALSE;
		}
		lstrcat(tcBuf,buf);
		WriteLogFile("receive start!");
		iRecv=recv(sock,buf,1024,0);
		WriteLogFile("receive end!");
		if( iRecv== SOCKET_ERROR) {
			m_ErrorMsg = BSTR("Receiv Error!");
			break;
		}
	}
	WriteLogFile("Receive Finish!");
	closesocket(sock);//关闭
	WSACleanup();//清除
	* pVal=::SysAllocString(T2OLE(tcBuf));
	free(tcBuf);
	WriteLogFile("Query End!");
	return S_OK;
}
其中:WriteLogFile()函数是我用来跟踪用的.发现速度最慢的语句是
iRecv=recv(sock,buf,1024,0);
实在是奇怪.
我的可用分有1000多分,为什么只能最高给出50分?大家也顺便回答一下.