In C#, how you define your data structures fundamentally changes how the computer handles them. Choosing a Class when you should have used a Struct can make your app 10x slower.
Classes live on the Heap. When you pass a class to a function, you are passing a 'Pointer' to the data. This is great for large objects but adds "Allocation Overhead".
Structs live on the Stack (usually). When you pass a struct, you are copying the FULL data. **Architect Tip:** Only use structs for small, immutable data (like a Point, a Money value, or a Lat/Long). If a struct is larger than 16 bytes, copying it becomes more expensive than the heap allocation of a class.
Records are NOT a new memory type; they are Classes or Structs with extra features. They provide 'Value-based Equality' (so two different objects with the same data are considered equal). Use them for **DTOs (Data Transfer Objects)** to make your code cleaner and safer.
Q: "What is 'Boxing' and why is it a performance killer?"
Architect Answer: "Boxing is when a Value Type (Struct) is converted to an Object (Reference Type) so it can be stored on the heap. This happens, for example, if you put an `int` into an `ArrayList`. It triggers a heap allocation and a copy operation. In a tight loop, boxing can cause thousands of allocations per second, triggering the GC and slowing the app to a crawl. Use **Generics (`List