Допустим, у меня есть несколько классов, подобных этим:
class MyClassA {
public List<string> UpData;
public List<string> DownData;
public List<string> LeftData;
public List<string> RightData;
}
class MyClassB {
public List<string> UpData;
public List<string> DownData;
public List<string> LeftData;
public List<string> RightData;
}
Я бы хотел реорганизовать их, чтобы я мог добавить некоторые удобства (например, Enumerator или наличие некоторых функций, которые позволяют мне выбирать специфику c member):
struct DirectionMap {
public List<string> Up;
public List<string> Down;
public List<string> Left;
public List<string> Right;
//... various helper functions ...
}
class MyClassA {
public DirectionMap Data;
}
class MyClassB {
public DirectionMap Data;
}
Однако мое приложение требует очень много памяти, и у меня есть миллионы таких экземпляров, поэтому мне нужно помнить об использовании памяти и сборе мусора. Я также должен мутировать эти объекты как можно чаще, поэтому скорость также важна. Есть ли какие-либо издержки производительности при выполнении этого?
Если я правильно понимаю, если бы DirectionMap
был классом, он бы использовал немного больше памяти для хранения указателя на него, а затем прикоснулся к куче, правильно? Но это бесплатно как структура?
Я понимаю, что изменяемые объекты в структурах могут вызывать ошибки, но я не планирую когда-либо передавать Data
, только списки строк, которые он содержит, которые являются ссылочными значениями.