меня сильно разочаровали, и я получил приложение, которое в определенных ситуациях работает как минимум в 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.
(Извините, это это, наверное, ужасный вопрос вроде ' В ответ на комментарий Ричарда ниже: Я думаю, что мой вопрос сводится к следующему: