Class VS ref Struct

2020-06-03 16:21发布

I am programming a game using C#, thus, I am very concerned about performance.

I would like to know what are the main differences, and if possible, performance considerations of using either a Class to pass data around, or a struct passed by reference.

I wish not to copy the data around, for performance reasons (I assume passing by ref is much faster than by value here).

I know that a class is always passed by reference and that a struct is passed by value, but I talking about passing the struct by reference here.

An example of the data I wish to pass :

    public delegate void PathCompleteDelegate(List<PathFinderNode> path);
public struct PathFinderJob{
    public PathCompleteDelegate callback;
    public Vector3 start, end;
    public PathSize unitSize;
    public BoxCollider boxCollider;
}

In the previous example, would using a class make a difference? If so, what would the difference be? Would a class be faster than a struct in this example? Why?

Thank you. Joao Carlos

2条回答
ら.Afraid
2楼-- · 2020-06-03 16:40

I know that a class is always passed by reference and that a struct is passed by value, but I talking about passing the struct by reference here.

You probably have the right idea, but this is incorrect. Everything in C# is passed by value unless you use the ref keyword.

Class instances are reference types, struct instances are value types.

When you pass a reference type by value, you pass a copy of the reference (small). When you pass a value type by value, you pass a copy of the whole data (potentially large).

Jon Skeet has a good explanation of all this here.

查看更多
相关推荐>>
3楼-- · 2020-06-03 16:48

Your delegate receives a reference type - a List, so you're passing the entire list by reference anyway.

Passing a large structure by value is definitely most expensive than passing just the reference. When you have a large structure, it usually doesn't make sense to use it as a structure, just turn it into a class.

Anyway, are you sure you'll have a performance issue here? Seems like a very premature optimization.

查看更多
登录 后发表回答