Выполнение кода медленнее при удаленном вызове?(.net удаленное взаимодействие) - PullRequest
2 голосов
/ 24 сентября 2011

У меня есть подпрограмма в моей программе VB.NET (framework 2). Эта подпрограмма не возвращает никакого значения, она просто выполняет различные проверки локальной БД.

Программа вызывает подпрограмму сразу после запуска, и для ее завершения требуется около 6 секунд.

Программа также выступает в роли сервера удаленного взаимодействия. Клиенты могут подключиться к нему и вызвать саб.

Когда удаленный клиент вызывает сабвуфер, для его завершения требуется около 28 секунд.

Почему это? В обоих случаях подпрограмма выполняется локально на сервере, но при удаленном вызове это занимает намного больше времени, даже если задача точно такая же.

Каким-то образом код выполняется в гораздо более медленном потоке при вызове с использованием удаленного взаимодействия .net?

Знаете ли вы, почему это происходит?

Вы знаете, как ее решить?

Спасибо за любую помощь!

EDIT:

Мне очень жаль за отсутствие информации. Я думал, что этого будет достаточно. Хорошо, вот и все ...

Это подпрограмма VB, она не возвращает никакого значения.

Сеть работает быстро, проблема не в том, чтобы добраться до удаленного компьютера, проблема в том, что для выполнения кода требуется больше времени, если он вызывается удаленно.

Если вы действительно хотите знать, основная часть подпрограммы представляет собой цикл, который копирует значения из набора записей DAO (да 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

В обоих случаях (при удаленном вызове и при локальном вызове на сервере) код работает с одной и той же БД (размещенной на сервере), в одном и том же состоянии (я имею в виду закрытый в начале) с одинаковыми записями.

Если вы измеряете время от ТОЧКИ А к ТОЧКЕ B, удаленный вызов вызывается гораздо больше времени, но, как видите, сеть не задействована. Для меня это займет столько же времени, но это не так.

Я звоню только 2 раза. Один локально самим процессом сервера, а другой удаленным клиентом.

Загрузка процессора сервера одинакова. В данный момент времени только один клиент вызывает сабвуфер.

Я не знаю, если .NET Framework делает другие вещи за кулисами, когда выполняет код, который был вызван удаленно, или поток, созданный для удаленного вызова, намного медленнее.

...