(Ignoring P/Invoke aspects, which is a different matter)
As a very general rule of thumb, you should only make types with small amounts of data (say 32 bytes) into structs.
Note that structs should ideally be immutable.
In terms of speed: It depends what you're doing, so you would have to perform some timings to really tell. However, it's likely that when you are passing items to a method it will be quicker to pass a reference type rather than a struct type when the struct size is greater than the reference size (which will be 32 bits for 32 bit code and 64 bits for 64 bit code).
One very important thing to bear in mind when creating arrays or List: For value types, the size of the value in bytes times the number of elements is the total contiguous size of the underlying array.
For reference types, the total size is the size of a reference (32 bits or 64 bits) times the size of the array.
Since the maximum size of an array is 2^31 bytes, this can be important if the size of the value type exceeds the size of a reference.