Okay, here are the results...and they make sense to me. Please let me know if anything I say doesn't make sense to you.
I changed the example you sent to make a seperate one for .NET and for the formula node - to keep everything clean. I also ran one pass before starting the timer (to get all the JIT, page faults, etc out of the way) and then looped 25 times and reported the average. Here is what I got on my machine
.NET, with CRM output wired: 378.92 ms
.NET, with CRM not wired: 268.92 ms
Formula Node (1000 iterations) 0.041 ms
So, where is the time being spent? Memory copies.
1. The first big hit you're going to take is having to copy the data in and out of .NET. The larger the array, the larger the memory copy.
2. The next really big hit (probably the biggest) is using 2D arrays with .NET. 1D arrays we can do a memory copy internally and get really good performance. In the 2D case, the .NET array isn't the same memory layout of a non-.NET array, so we must copy element by element...ouch!
3. Internally, .NET is much slower at accessing 2D array elements - again, it's an issue with their array design. Even MS admits the multi-dimensional arrays in .NET need work.
4. When using formula nodes, all of this goes away - LV has full access to the memory and no copies need to be made. Everything is pure assembly code manipulating the data.
If you can convert your code to work with a linear 1D array (each row one after another in a 1D format), you'll probably see the time drop considerably. Still faster in LV - all one environment with no copies at all, but the difference would probably be down to a few tens of ms at most.