我的VB.NET(框架2)程序中有一个子程序。该子程序不返回任何值,只是对本地数据库执行各种检查。
程序在启动后立即调用sub,大约需要6秒钟才能完成。
该程序还充当网络远程服务器。客户端可以连接到它并调用sub。
当远程客户端调用sub时,大约需要28秒才能完成。
为什么?在这两种情况下,sub都在服务器中本地执行,但是当远程调用时,即使任务完全相同,也需要花费更多的时间。
使用.net远程调用时,某种程度上代码是在一个慢得多的线程中执行的吗?
你知道为什么会这样吗?
你知道怎么解决吗?
感谢您的帮助!
编辑:
我很抱歉缺乏信息。我觉得这就够了。好的,这就是......
这是一个VB子,它不返回任何值。
网络速度很快,问题是没有到达远程计算机,问题是如果远程调用代码似乎需要更多工作。
如果你真的想知道,sub的主要部分是一个循环,它将DAO(yes DAO)记录集中的值复制到集合中:
Sub MySub
'This sub can be called both remotemy and locally.
Dim IDsAtTable As New Dictionary(Of Integer, Integer)
‘Open database and fast stuff.
‘{…}
‘POINT A
RS = DB.OpenRecordset("SELECT ID FROM " & Table & " WHERE IDSucursalFuente=" & IDThisSucursal & " ORDER BY ID")
Fld = RS.Fields("ID")
Do While Not RS.EOF
ID = Fld.Value
If Not IDsAtTable.ContainsKey(ID) Then IDsAtTable.Add(ID, ID)
RS.MoveNext()
Loop
RS.Close()
RS = Nothing
‘POINT B
'Check elements stored at IDsAtTable, this is fast.
‘Close database and fast stuff.
‘{…}
End Sub
在这两种情况下(远程调用和在服务器上本地调用时)代码使用相同的DB(托管在服务器上),处于相同的状态(我的意思是在开头关闭),具有完全相同的记录。
如果你测量从POINT A到POINT B的时间,如果远程调用sub会花费更多的时间,但正如你所看到的,没有涉及网络。对我来说,它应该花费相同的时间,但事实并非如此。
我只拨打了2次。一个由服务器本地处理,另一个由远程客户端处理。
服务器的处理器负载是相同的。只有一个客户端在给定时间调用sub。
我不知道.NET框架在执行远程调用的代码时是否在幕后做其他事情,或者为远程调用创建的线程要慢得多。