В настоящее время я разрабатываю веб-приложение C# MVC REST и пытаюсь выбрать одну из двух возможностей для нашего дизайна.C# Static Method vs Object Instance
Не углубляясь в наш дизайн, мы намерены иметь класс для доступа к данным, который мы назовем DataSource
. Каждому DataSource
необходимо будет выполнить небольшие, содержащиеся блоки логики, чтобы правильно построить соответствующий ответ. Из-за желания иметь возможность использовать код горячей загрузки в будущем, мы не хотим, чтобы они были функциями на DataSource
, вместо этого мы хотели бы, чтобы они были предоставлены другими сборками. У нас есть доказательство того, что это реализовано, и до сих пор такое хорошее.
Что я пытаюсь решить между написанием статического класса с помощью одной статической функции ExecuteQuery
или написанием фабричного метода для создания экземпляров этих классов, которые имеют метод экземпляра, называемый ExecuteQuery
.
Каковы соображения производительности между созданием нескольких короткоживущих объектов для каждого запроса, а также вызовом статических методов?
Интуитивно, статические методы будут быстрее, но я уже ожидаю, что у меня начнется головная боль, называя их отражением (для поддержки требования к горячим загрузкам).
Если для короткоживущих объектов нет огромного штрафа, они могут выиграть только на простоте.
Соответствующая информация о наших ожидают нагрузок:
- Время отклика в 300 мс - диапазон 800ms
- Средняя нагрузка около 2000 веб-клиентов
- Пик нагрузки около 4000 клиентов
- Клиенты делают запросы каждые 2 - 5 секунд
- Пиковая скорость клиента 1 запрос каждую секунду
Кроме того, каждый DataSource
создаст максимум 8, в среднем 3 из этих экземпляров.
Возможно, ваше намерение использовать отражение вызовет больший удар по производительности, чем использование static-vs-instance. Как прокомментировали другие, вы должны выбрать форму, которая наиболее подходит для _design_. В качестве альтернативы, поскольку у вас есть определенные намеченные показатели, вы можете издеваться над реализацией статического/экземпляра и получить представление о накладных расходах, с которыми вы столкнетесь. –