怎么快速的将数组中的所有值赋值为一个非0数(memset类似方法)

如何快速的将数组中的所有值赋值为一个非0数(memset类似方法)
int[] array = new array[512 * 512];
for(int i = 0; i != array.Length; ++i)
{
    array[i] = 10;
}

循环赋值比较慢,有没有什么方法能快速实现这段代码要做的事情?

多谢!
------解决方案--------------------
以下方法可以快速初始化一个非0的数组:

string[] s = "".PadRight(512 * 512, '1').ToCharArray().Select(c => c.ToString()).ToArray();

------解决方案--------------------
在C#中,循环是最快的,要想更快,用unsafe和指针,相比较用下标访问数组,它不会执行边界检查所以更快。
------解决方案--------------------

            int[] array = new int[512 * 512];
            array = array.Select(data => 10).ToArray();

没测试…… 不知道速度……
------解决方案--------------------
用LINQ,里面也是循环
------解决方案--------------------

int[] array = Enumerable.Repeat<int>(10, 512 * 512).ToArray();

那这样呢怎么快速的将数组中的所有值赋值为一个非0数(memset类似方法)
------解决方案--------------------
memset本来就只能将每个字节填充为一样的。你这种int类型无法使用memset的。

memset可以对应API函数FillMemory。

像你这样的512*512的数组 初始化耗时在现代CPU基本可以忽略。 我这里给你一个用内存拷贝的快速方式 。


 int Index = 1;
            array[0] = 10;
            fixed (int* Src = array)
            {
                while ((array.Length) > (1 << Index))
                {
                    CopyMemory(Src + (1 << (Index - 1)), Src, (1 << (Index - 1)) * sizeof(int));
                    Index++;
                }
                Index--;
                CopyMemory(Src + (1 << Index), Src, (array.Length - (1 << Index)) * sizeof(int));
            }


其中CopyMemory的原型为:

        [DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory", SetLastError = true)]
        internal static extern void CopyMemory(void * Dest, void * src, int Length);

我测试了5000* 5000的int数组,你那种写法时间在100ms左右,上面的约50ms。