Hi Bijan -
I looked into this, and, after a bit of digging, discovered that the difference is that the Color and Vector types in the C# code are structs, but in the F# code they are classes. This is leading to more GC, which is interuptng the raytracing code more often.
You can make the F# code the same by adding [<Struct>] above each of the Color and Vector type definitions.
Coincidentally, to hunt this problem down, I used the new VS2010 Concurrency Profiler, to grab traces of the two versions of the app. There was a very clear difference between the two, where the worker threads doing the work for the Parallel.For were constantly sleeping in the F# version, but were almost pure execution in the C# version. Selecting the periods of sleeping on these threads interspersed between the raytracing execution showed stack traces which always included a Vector or Color operation causing an allocation which ultimately put the thread to sleep when a GC was needed.
Thanks,
Luke