Command pattern with structs
It will not work well, I think. The only way to escape boxing on storing is to have a value type collection, so all your commands will need to be of the same type...
Also structs are very specific things, have a look below:

Here about Boxing/unboxing.
Size/speed issues - try to run this test.
See Using Structs:


When you create a struct object using the new operator, it gets created and the appropriate  constructor is called. Unlike classes, structs can be instantiated without using the new operator. In  such a case, there is no constructor call, which makes the allocation more efficient. However, the  fields will remain unassigned and the object cannot be used until all of the fields are initialized.
When a struct contains a reference type as a member, the default constructor of the member must be  invoked explicitly, otherwise the member remains unassigned and the struct cannot be used. (This  results in compiler error CS0171.)
There is no inheritance for structs as there is for classes. A struct cannot inherit from another  struct or class, and it cannot be the base of a class. Structs, however, inherit from the base class  Object. A struct can implement interfaces, and it does that exactly as classes do.