以下方法可以快速初始化一个非0的数组:string[] s = "".PadRight(512 * 512, '1').ToCharArray().Select(c => c.ToString()).ToArray();

解决方案 »

  1.   

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

  2.   


                int[] array = new int[512 * 512];
                array = array.Select(data => 10).ToArray();没测试…… 不知道速度……
      

  3.   

    谢谢各位,Linq表达式项目不考虑使用,GC太高了,看来确实没有类似memset的函数了……
      

  4.   


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

  5.   

    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。