Sni.DelWoods Ответов: 2

C#: публичный класс производительности со статическим методом,


Влияет ли объявление метода статическим на производительность или использование оперативной памяти в C#?

Допустим, у меня есть 50 пользователей веб-страницы одновременно, которые создают 50 отдельных экземпляров класса примера ниже.

Я бы ожидал, что WorkerStatic будет более эффективен, чем Worker - по крайней мере, для независимого метода ().

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

Что я уже пробовал:

Тест.aspx-файл
<html><body>
<% var worker = new Worker(); %>
</body></html>


TestStatic.aspx-файл
<html><body>
<% var worker = new WorkerStatic(); %>
</body></html>


Работник.в CS
public class Worker
{
   int workerCount = 0;
   public void SetWorkerCount (int count) { workerCount = count; }
   public int GetWorker () { return workerCount; }
   public static string Independent() { return DateTime.Now.ToString(); }
}

public class WorkerStatic
{
   int workerCount = 0;
   public void SetWorkerCount (int count) { workerCount = count; }
   public static int GetWorkerStatic () { return workerCount; }
   public static string IndependentStatic () { return DateTime.Now.ToString(); }
}

2 Ответов

Рейтинг:
4

Jochen Arndt

Между статическими и нестатическими методами нет существенной разницы в использовании памяти и производительности. Единственное отличие заключается в том, что нестатические методы имеют скрытый параметр для экземпляра класса. Это приводит к еще нескольким байтам кода, выполнение которых заняло некоторое время. Но это ничтожно мало.

Но статический метод не может получить доступ к другим нестатическим членам класса. Итак, функция GetWorkerStatic() из вашего примера будет работать только тогда, когда workerCount это тоже статично. Тогда все экземпляры будут делиться тем, что, вероятно, не то, что вы хотите.


Sni.DelWoods

Спасибо за ваш комментарий.

Рейтинг:
15

OriginalGriff

Нет.
Для метода нет существенной разницы в производительности - код загружается только один раз для всех экземпляров, независимо от того, является ли он статическим или связанным с экземпляром. Отдельные экземпляры не получают отдельной копии метода, так как это код, который в любом случае доступен только для чтения!


Sni.DelWoods

Это очень хорошая информация в целом.
Таким образом, весь код класса выходит только один раз во всем проекте.

Я узнал, что независимо от того, сколько кода находится в классе, создаются только переменные - в примере это только workerCount.

Спасибо за это.

OriginalGriff

Всегда пожалуйста!