Set Effect array values

If I do
lightEffect.Parameters["lightPosition"].Elements[0].SetValue(new Vector3(0, 0, 3)); lightEffect.Parameters["lightPosition"].Elements[1].SetValue(new Vector3(4, 4, 3)); lightEffect.Parameters["lightPosition"].Elements[2].SetValue(new Vector3(8+cameraOrigin.X, 8, 3));
the values of my array in my shader never change values (taking values set on first frame), whereas

lightEffect.Parameters["lightPosition"].SetValue(new[]{ new Vector3(0, 0, 3),new Vector3(4, 4, 3), new Vector3(8 + cameraOrigin.X, 8, 3)});
works fine. This is presumably because the StateKey is not being changed using the first method. Is this expected behaviour? It seems counterintuitive to me.

Maybe a problem in Monogame. But this way of sending data to the GPU is probably rarely used.
On the other hand, why not using a 3x3 matrix to set the value in one “send” to the GPU ?
Calling new every frame is not good for speed, regardless any argument concerning caching/Garbage collector. From my experience from the very 1st version of XNA , it is faster to update an already instanciated object than making a new one every frame.