Существуют ли какие-либо соображения относительно производительности или конкуренции при использовании «статических» классов и методов VB.Net «Shared» или C #? - PullRequest
1 голос
/ 03 мая 2010

У меня есть библиотека классов C # за службой WCF. Библиотека содержит ClassA, который объявлен как статический. Этот статический класс имеет метод MethodA, который принимает строку и использует LINQ для запроса к базе данных перевода строки, которую он затем отправляет обратно через веб-сервис клиенту.

У меня вопрос, является ли использование статического класса и статического метода в этой ситуации плохим дизайном. Должны ли класс и метод быть нестатичными, чтобы каждый клиент получал свой экземпляр класса для производительности, конкуренции или по другим причинам? Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 мая 2010

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

Одна проблема, которую я вижу, - это контекст данных. При использовании статического метода вы, вероятно, не имеете точного контроля над продолжительностью жизни соединения с базой данных? Альтернативой может быть сделать его нестатическим классом и методом и инициализировать его в статическом конструкторе службы WCF. Таким образом, вы сможете легче изменить поведение позже, если потребуется.

На самом деле, статические конструкторы в сервисах WCF плохи, если у них есть шанс на сбой, например, если база данных находится в состоянии AWOL на секунду. Дело в том, что это позволит более детально контролировать сам сервис.

1 голос
/ 03 мая 2010

Я согласен с тем, что Торарин уже ответил. Я обычно не вижу никакого вреда в статических классах, особенно когда он содержит только статические методы, которые что-то делают и возвращают результат, даже не касаясь статических полей или свойств. Однако, как только появятся модификации любого из них, это может означать проблемы. (Ищите, например, любое обсуждение синглетонов и параллелизма здесь на SO.)

С точки зрения производительности, вызов статического метода теоретически должен быть немного быстрее, чем вызов нестатического метода (хотя для всех практических целей это, вероятно, никогда не окажет существенного влияния), поскольку среда выполнения не необходимо передать указатель this / Me, и поскольку со статическими методами, безусловно, не будет никаких накладных расходов в результате вызовов виртуальных методов.

...