为什么我client用多线程调用server的WebMethod,返回很慢?我用C#写了一个client程序,这个程序调用一个简单本地方法MethodA(). 我同时启用100个线程,共累计对MethodA()执行10000次调用。执行的结果非常快,一会儿10000次调用就正常完成了。于是,我把方法MethodA()做成webservice的webmethod,也叫MethodA(),把它发布在IIS里,然后client程序同样启用100个线程,共累计对webmethod MethodA()执行10000次调用。执行的结果非常就非常慢。根据我自己写的log,发现一下现象:1. 最开始几个调用,速度尚可,但是越到后面越慢
2. webservice的webmethod执行时间正常,我分别在MethodA()的第一行和最后一行记录了时间戳在log文件中,
执行时间无延时。
3.我又在client调用MethodA()的那一行的前后记录了时间戳在log文件中,发现执行时间有相当的延迟。6/7/2010 12:34:43 AM:Client MethodA()(CHN-ENTFX-001 entering...)
6/7/2010 12:36:37 AM:Server MethodA()(CHN-ENTFX-001 entering...)
6/7/2010 12:36:37 AM:Server MethodA()(CHN-ENTFX-001 Exit...)
6/7/2010 12:36:37 AM:Client MethodA()(CHN-ENTFX-001 Exit...)4. 我发现延迟发生在request进入web method的那一刻。5. client 和server的网络没有任何问题。我估计是IIs/ASP.net 2.0/web service/webMethod的最大允许线程的限制造成的。搜了一下interent, 修改了一下地方,但问题依然没有解决。在machin.config中修改maxWorkerThreads和maxIoThreads的值。Start the registry editor (regedit.exe)
Move to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters
From the Edit menu select New - DWORD value
Enter a name of MaxPoolThreads and press Enter
Double click the new value and set to between 5 and 20. Never more or less. Click OK
Stop and start the IIS service 现请教高手,有何办法可以解决这个问题?我应该修改些什么?
谢谢!环境:
client:windows 2003 + .net 2.0 + c# + console application
server: windows 2003 + IIS + asp.net 2.0 + c# + web service
2. webservice的webmethod执行时间正常,我分别在MethodA()的第一行和最后一行记录了时间戳在log文件中,
执行时间无延时。
3.我又在client调用MethodA()的那一行的前后记录了时间戳在log文件中,发现执行时间有相当的延迟。6/7/2010 12:34:43 AM:Client MethodA()(CHN-ENTFX-001 entering...)
6/7/2010 12:36:37 AM:Server MethodA()(CHN-ENTFX-001 entering...)
6/7/2010 12:36:37 AM:Server MethodA()(CHN-ENTFX-001 Exit...)
6/7/2010 12:36:37 AM:Client MethodA()(CHN-ENTFX-001 Exit...)4. 我发现延迟发生在request进入web method的那一刻。5. client 和server的网络没有任何问题。我估计是IIs/ASP.net 2.0/web service/webMethod的最大允许线程的限制造成的。搜了一下interent, 修改了一下地方,但问题依然没有解决。在machin.config中修改maxWorkerThreads和maxIoThreads的值。Start the registry editor (regedit.exe)
Move to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters
From the Edit menu select New - DWORD value
Enter a name of MaxPoolThreads and press Enter
Double click the new value and set to between 5 and 20. Never more or less. Click OK
Stop and start the IIS service 现请教高手,有何办法可以解决这个问题?我应该修改些什么?
谢谢!环境:
client:windows 2003 + .net 2.0 + c# + console application
server: windows 2003 + IIS + asp.net 2.0 + c# + web service
解决方案 »
- 我想在网站的首页弄个繁简转换的功能,怎么搞呀~~
- 求教~~~模式窗口的问题
- 新建一个string的二维数据,与DropDownList绑定,我想指定二维数据的第一项给DataTextField,第一项给DataValueField,如何做?
- .net中的留言板中显示数据问题
- 如何精确定位页面元素?
- 为什么美*国*微*软*总部会经常访问我公司的内部网站?
- 关于sadf.aspx?XX=XX的问题
- 这段SQL命令是什么意思啊
- 如何让TEXTBOX,或LISTBOX WEB控件具有想CLICK类似的事件,让选择的内容显示到另外一个TEXTBOX中去
- 怎么在cs文件中添加一个客户端按钮!!
- 求一日期控件或解决方法
- 分页保存dropdownlist选中的值!
也许有以下的因素:
1.你在本地机上测试,网络瓶颈就不存在了.
当你在远程环境下测试,别的不说,同一个网络通道(你的电脑与服务器端),要在短时间内上行/下行 几万次的传输,这对你的网卡的CPU以及网络通道都是不小的压力.2.webservice一般是基于soap+http,需要进行SOAP/xml封装.这也会降低一定的效率.
不如服务器端改成.ashx来处理.