Jas*_*yon 103
根据元素类型,将Array中的元素范围设置为零,to
false或tonull(在Visual Basic中为 Nothing).
Cha*_*hap 48
C++: memset(array, 0, array_length_in_bytes); 
C++ 11: array.fill(0);
C#: Array.Clear(array, startingIndex, length);
Java的: Arrays.fill(array, value);
Dus*_*etz 16
Array.Clear(integerArray, 0, integerArray.Length);
And*_*yWD 15
UPDATE
基于该基准关于Array.Clear()和array[x] = default(T)性能,我们可以说有两个主要案件零的数组时,需要考虑:
A)有一个长达1..76个项目的数组;
B)有一个长度为77或更多的数组.
因此,图上的橙色线表示Array.Clear()方法.
图中的蓝线表示array[x] = default(T)方法(迭代数组并将其值设置为default(T)).
您可以写一次Helper来完成这项工作,如下所示:
public static class ArrayHelper
{
    // Performance-oriented algorithm selection
    public static void SelfSetToDefaults<T>(this T[] sourceArray)
    {
        if (sourceArray.Length <= 76)
        {
            for (int i = 0; i < sourceArray.Length; i++)
            {
                sourceArray[i] = default(T);
            }
        }
        else { // 77+
             Array.Clear(
                 array: sourceArray,
                 index: 0,
                 length: sourceArray.Length);
        }
    }
}
用法:
someArray.SelfSetToDefaults();
Dus*_*etz 12
有几个人发布了答案,然后删除了它们,说在任何语言中,for循环将与memset或FillMemory或其他任何东西一样高效.
例如,编译器可能会将其块化为64位对齐的片段,以利用64位零分配指令(如果可用).它需要考虑对齐和考虑因素.Memset的实现肯定不是微不足道的.
一个memset.asm.另请参阅memset-is-faster-than-simple-loop.html.
永远不要低估编译器和标准库编写者的无限狡猾.
使用dll import调用方法。它快速且易于使用:)
 [DllImport("msvcrt.dll", EntryPoint = "memset", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
 public static extern IntPtr MemSet(IntPtr dest, int c, int byteCount);
c是你要在内存中设置的值
或者
[DllImport("kernel32.dll", EntryPoint="RtlZeroMemory")]
public unsafe static extern bool ZeroMemory(byte* destination, int length);
这只会将给定数组设置为零