Увеличивает ли количество методов в классе издержки объекта этого класса? - PullRequest
14 голосов
/ 09 августа 2010

Представьте, что я использую класс, чтобы вернуть элементы из базы данных, скажем,

class BankRecord {

public int id;
public int balance;

public void GetOverdraft() {
...
}
public void MakeBankrupt(){
...
}

}

Теперь, что случилось бы с производительностью использования этого, если бы было только 2 метода (как выше) или 100 методов, возможно, некоторые из них очень большие.

Было бы хуже создавать сотни этих объектов, если бы все методы были для каждого объекта? Это для языков типа c # / java, но было бы полезно знать все языки.

Или это хорошая практика иметь отдельный класс, выполнять все действия над этими объектами и оставлять объект как чистый класс данных?

Ответы [ 2 ]

8 голосов
/ 09 августа 2010

Среда выполнения не дублирует код при создании экземпляра объекта. Только поля-члены занимают место в памяти при создании экземпляра. По этой причине вам не следует создавать классы «только для данных», если у вас нет для этого какой-то другой причины проектирования.

При этом существуют и другие передовые практики, по которым вам может не потребоваться класс с множеством методов (например, анти-шаблон объекта God ).

5 голосов
/ 09 августа 2010

Нет. В объектах CLR есть указатель на метаинформацию этого типа, которая включает в себя все необходимое для отражения и таблицу методов. Затраты на поиск реализации метода в таблице методов одинаковы, независимо от количества записей в таблице. См. эту статью для получения дополнительной информации. В двух словах, все объекты имеют 8 байтов служебной информации (4 для дескриптора типа и 4 для синхронизирующего блока).

Однако то, что может быть медленнее, является отражением. Это происходит только потому, что если вы хотите перечислить через метаданные типа, то будет медленнее, если в этом типе будет объявлено больше членов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...