Массив Struct и зубчатые массивы размещаются в памяти практически одинаково, поэтому при использовании их не должно быть снижения производительности.
public struct Struct
{
// Unless you're filling your get/set blocks with anything,
// these properties will be in-lined in compilation time
// and will have the same performance/behavior as using public fields
public decimal A { get; set; }
public decimal B { get; set; }
public decimal C { get; set; }
public decimal D { get; set; }
}
Так что я бы подумал об использовании открытых полей. Но это только мое мнение, мне нравится четко знать, как все будет вести себя.
Об использовании десятичной дроби для денег, это не всегда так. десятичное - это 128-битное поле данных, оно имеет ОЧЕНЬ высокую точность, но его целочисленная часть имеет узкий диапазон значений. Если вам нужна высокая точность для расчета ставок или что-то в этом роде, но вам не нужны действительно высокие значения, выберите десятичную. Если вам нужны более высокие значения и не такая большая точность, выберите удвоение. Если вы имеете дело с небольшими значениями и просто нуждаетесь в достаточной точности, используйте float.
Помните, что чем ближе тип данных к 32-битному (или ширине шины), тем меньше времени потребуется для загрузки данных.
Надеюсь, это поможет!