Вызов метода для объекта несколько раз по сравнению с созданием объекта несколько раз.
У меня есть список с именем myData, и я хочу применить определенный метод (someFunction) к каждому элементу в списке. Является ли вызов метода через конструктор объекта более медленным, чем многократный вызов одного и того же метода для одного конкретного экземпляра объекта?
Другими словами, это:
for(int i = 0; i < myData.Count; i++)
myClass someObject = new myClass(myData[i]);
медленнее, чем это:
myClass someObject = new myClass();
for(int i = 0; i < myData.Count; i++)
someObject.someFunction(myData[i]);
?
Если да, то насколько медленнее?
3 ответа
Первый подход может привести к значительному увеличению рабочего набора процесса. Это также может привести к нехватке памяти в Windows, в результате чего другие приложения будут выгружены на диск.
Кроме того, это окажет большое давление на сборщик мусора CLR, поскольку каждый новый создаваемый вами объект будет отслеживаться для сбора.
Насколько медленнее это будет, во многом зависит от размера и количества создаваемых вами объектов.
Вы можете сделать это еще быстрее, если вы используете статический метод, пожалуйста, используйте Code Analisys из Visual Studio 2010, он предупредит вас, если какой-то метод является кандидатом на статический.
С точки зрения производительности, второй блок кода, скорее всего, будет быстрее, так как у него нет дополнительных накладных расходов на создание объектов и сборку мусора.