Web服务客户端,Delphi的效率远不如.NET的效率(C#写的Web服务)(200分)

  • 主题发起人 主题发起人 the3rd
  • 开始时间 开始时间
T

the3rd

Unregistered / Unconfirmed
GUEST, unregistred user!
我用C#写了一个简单的ASP .NET Web Services,提供当前的时间,
使用Delphi7Ent写了一个客户端程序,发现每秒也就只能调用4-5次,
可是C#自己写的客户端确达到60次以上,这是为什么?
然后直接拿IE测试,发现速度绝对能够达到60次以上,Delphi会有
不同的处理吗?
还有就是,如果将Delphi的客户端放到Web服务所在的计算机上就可以达到
60次以上的速度,而放到其他的计算机上就不行,而.NET的客户端就没有
这个问题。
哪位朋友遇到过这样的问题,望不吝赐教!
有什么好的注意尽管说。
 
.net上还是c#好,而且.net的代码也有大部分是c#编的。
只有看看borland的c#如何
 
用delphi写web service的确是痛苦,也可能是我经验不多、方法不对
哪位师兄指点一下。
还有就是怎样连接access数据库?用ado怎么不行呀?
 
还有就是,如果将Delphi的客户端放到Web服务所在的计算机上就可以达到
60次以上的速度,而放到其他的计算机上就不行,而.NET的客户端就没有
这个问题。
这个可能就比较有问题了,应该与你的网络配置有关系了,比如客户端机器的
DNS配置,从dns查询IP消耗时间太长等等....
 
to: lynu
请注意“而.NET的客户端就没有这个问题”,为什么都是客户端,用.NET写的就
没有问题,而用Delphi写的就要耗时200毫秒?
这不应该网络配置的问题,我觉得这是客户端对GET/POST的处理机制的问题,
具体的不太清楚,望高手赐教。
还有,那位朋友知道如何用.NET调用Delphi写的Web服务,我试过,虽然能够引
出相应的接口定义,但在运行过程中出错。
 
我用过Indy控件,发现他使用TCP协议时,每隔200毫秒左右才能读到
从另一端发来的数据包,
我怀疑Delphi的客户端在初始化Socket的时候有参数设置的问题,
欢迎对TCP、Socket熟悉的朋友加入!
 
真的彻底的认真的比较过,当然用delphi开发web的确是挺痛苦的,不过感觉速度差的不是很多
 
好痛苦吗?
我不觉得,相反还好爽,速度也快,就看用什么来构架你的 WEB!
 
我的测试代码应该和架构没有关系,和数据库没有关系,很简单,
就一个函数——获得WebServices所在计算机上的当前时间,
.NET和Delphi的差距比较明显,真的怀疑Delphi的TCP,Socket。
 
Delphi自带的webservices客户端方案,在通讯上是直接用的wininet(win32)或indy httpclient(linux),你应该是在win32上测试比较的,如果你要怀疑tcp上的问题,应该会首先怀疑wininet,据我一个朋友在msdn上查的资料,wininet在多线程处理上确实有问题,据说只能同时有二个线程进行处理.而.net很可能不是用wininet进行http client请求调用.
 
To: lynu,谢谢!
我不是很清楚Delphi的客户端到底使用哪一种tcp的底层机制,但是我可以肯定,
Indy的周期也是200毫秒左右,因为我曾经从一台计算机上向另一台每隔40ms
发送命令,结果接收端只能以200毫秒的周期收到命令(也就是每隔200ms左右,
在某个很短期间收到4-5个命令),我想Windows平台中的Indy的底层应该不是
wininet,应该是比wininet更低级的东西,至少也应该是wsock32.dll之类吧。
[:)]
要是VS.NET做的客户端也这样,我也就不会提这些问题了,
真的很希望Borland自己能对此做出说明。^_^
 
indy 用的是阻塞机制,所以这是肯定的,特别在数据量小没有超过发送缓冲的时候,这是必然。
猜测!
 
客户端性能没有.Net写的性能好,这点我是相信的。不过决不会差这么多的。
DELPHI写出的Web Service客户端程序是需要优化才能达到最佳的性能的!李维的书里还专门进行了论述。
 
To: Helloqiner
怎么优化呀,详细说说,谢谢了!
不过不要和我说采用优化客户端界面处理的方式,这很重要,
但是不在这个话题的讨论范围之内。[:)]
 
不是,
要注意使用 THTTPRIO 的 URL 属性,而不能使用 WSDLLocation 属性指定Web Service的地址。否则好像是跟据Delphi内部实现机制,要从服务器上下载两遍WSDL的,这点李维做了专门论述。还有是需要设置什么属性可以减少Delphi对Web Service返回结果所做的处理,记不大清啦。
 
to:helloqiner
我试了试,局域网内耗时150-200ms,
WSDLLocation和URL相差无几。
[:)]
我觉得还是TCP底层处理的问题。[:(]
 
后退
顶部