Какие-нибудь «быстрые победы», которые позволят ускорить удаленное взаимодействие .NET на одной машине?

меня сильно разочаровали, и я получил приложение, которое в определенных ситуациях работает как минимум в 100 раз медленнее, и я должен очень скоро выпустить его нашим клиентам (вопрос недель).

С помощью очень простого профилирования я обнаружил, что узким местом является использование .NET Remoting для передачи данных между службой Windows и графическим интерфейсом - обе работают на одном компьютере.

Рекомендации Microsoft скажем: «Сведите к минимуму круговые обходы и избегайте болтливых интерфейсов»: пишите

MyComponent.SaveCustomer("bob", "smith");

, а не

MyComponent.Firstname = "bob";
MyComponent.LastName = "smith";
MyComponent.SaveCustomer();

Я думаю, это корень проблемы в нашем приложении. К сожалению, вызовы MyComponent. * (Профилировщик показывает, что 99,999% времени тратится на такие операторы) разбросаны по всему исходному коду, и я не вижу никакой надежды на переделку интерфейса в соответствии с приведенными выше рекомендациями.

Edit : Фактически, большую часть времени интерфейс считывает свойства из MyComponent, а не записывает в него. Но я подозреваю, что MyComponent может измениться в любой момент в серверной части.

Я посмотрел, могу ли я прочитать все свойства из MyComponent за один раз, а затем кэшировать их локально (игнорируя проблему изменения в любое время выше), но это потребует изменения сотен строк кода.

Мой вопрос: есть ли какие-нибудь «быстрые» вещи, которые я могу попытаться улучшить?

Мне нужно как минимум 100-кратную скорость - вверх. Я программист на C / C ++ / Delphi и практически не знаком с C # /. NET / Remoting, за исключением того, что я прочитал за последние пару дней. Я ищу вещи, которые можно завершить за несколько дней - серьезная реструктуризация кода невозможна.

Для начала, я уже подтвердил, что он использует BinaryFormatter.

(Извините, это это, наверное, ужасный вопрос вроде ' В ответ на комментарий Ричарда ниже: Я думаю, что мой вопрос сводится к следующему:

  1. Могу ли я изменить какой-либо параметр, чтобы снизить стоимость двусторонней передачи .NET Remoting, когда оба конца соединения находятся на одном компьютере?
  2. Есть ли какой-нибудь параметр, который я могу изменить, чтобы уменьшить количество циклов приема-передачи, чтобы каждый вызов свойства удаленного объекта не приводил к отдельной передаче туда-обратно? И может ли это что-нибудь сломать?

6
задан Ian Goldby 12 November 2010 в 10:44
поделиться