I think the GC may treat reference type and value type differently.
GC will collect the reference type if there is nobody have a reference to it.
When GC will collect the value type like struct? My struct is not small. I want it be collected as earlier as possible. With a profiler software, I saw that struct has a big accumulation and is the major memory consummer.
A struct will only be in the managed heap (i.e. where it can be garbage collected) if it’s either an instance/static field, or as part of another object, or boxed, or in an array1. It’s never "naked" in the managed heap – the closest you can get is a boxed value.
If you have a large struct, that’s your first problem. Why have you created such a thing? Structs should almost always be small (the rule of thumb is usually 32 bytes) as otherwise every time you use it as a method argument or assign it to another variable, you’ll end up copying it.
Have you considered using a class instead?
1 As Eric Lippert is fond of pointing out, the stack is an implementation detail. Furthermore, in certain cases local variables end up as fields in autogenerated classes… but that’s somewhat irrelevant for this question, I believe.