Try to optimize code by preparing it in a way that would fit SIMD instructions from various extensions. I'm not sure how good is compiler at detecting this.. but thats one of not many methods known to me to accelerate large amounts of simple processing.
That's a great idea, but its rather brittle. Unless the compiler gives explicit ways of telling it to use SIMD instructions or to at least consider using SIMD instructions, you are basically relying on assumptions about the compiler that may not hold next release, or if you switch to another compiler, or how the compiler feels that day, etc.
Still making it easier for the compiler to see something could be done with a special instruction from an extension may not be a bad idea.
Other way I know has to do with data localization.. but I'm not sure even if something can be done with this in C# (basically data needs to be co-located in memory so that cache hits are optimized since all data required for calculation is already in cache).
I think C# is like most modern languages, there are no guarantees about how your high level code is ordered and/or addressed in the final machine code.
It is perfectly valid for two variables in the same scope that are right next to each other in the source code to be separated by like several megabytes of stuff in the final machine code.
Now of course, most sane compilers won't do this kind of nonsense, and will strive to keep things that are frequently accessed together near each other.
This is VERY much unlike C, where there are some good guarantees about how the code will compile into machine code, including things like ordering and addressing.
EDIT: Clarification, there are no guarantees about ordering short of the minimum necessary to implement proper initialization order that the high level language mandates.