Подтвердить что ты не робот

Имеет ли много методов в классе увеличение служебных данных этого объекта класса?

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

class BankRecord {

public int id;
public int balance;

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

}

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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