Если мы не создаем объект из класса, методов класса и информации о размере, который все еще загружается в таран при выполнении программы? - PullRequest
0 голосов
/ 25 мая 2020

Я планирую закодировать карточную игру в Unity / C#. В этой игре каждая карта будет отдельным классом, производным от основного класса Card. И они переопределят виртуальные функции карты. Моя проблема в том, что если есть 1000 карт и более, информация о методах и размерах всех классов карт будет загружаться в барабан при выполнении игры? Если да, то как мы можем управлять этим периодом? Я просто хочу загрузить данные классов, которые карты в колоде игрока, в барана. Ваши предложения? Заранее спасибо.

1 Ответ

0 голосов
/ 25 мая 2020

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

public class MainCard {
    // properties
    // 2 methods
}

Загрузите и запустите вашу программу (что-то простое, которое просто создает экземпляр объекта MainCard) и определите, сколько памяти она занимает.

Затем создайте 100 производных классов которые переопределяют методы в MainCard. Реализации замещенных виртуальных методов могут быть идентичными.

public class Card01 : MainCard {
    // override both MainCard methods
}

public class Card02 : MainCard {
    // copy Card01 implementation here
}

Сделайте это для 100 классов. Посмотрите, сколько памяти требуется.

Помните, что в C# код класса даже не обязательно загружается в память, пока не будет создан экземпляр класса, а затем вы получите только метаданные. за исключением фактически вызываемых функций. Компилятор Just In Time по мере необходимости выполняет загрузку и компиляцию собственного кода. Если, конечно, вы не выполните предварительную компиляцию при установке.

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

...