如何快速将数组初始化为-1?

jav*_*red 3 c#

我知道我不应该优化我的程序的每一个点,让我们假设我必须优化数组初始化.

所以我写的程序,比较for loopArray.Clear

using System;
using System.Diagnostics;

namespace TestArraysClear
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = new int[100000];
            Stopwatch sw = Stopwatch.StartNew();
            for (int i = 0; i < 10; i++)
            {
                sw.Reset(); 
                sw.Start();
                for (int j = 0; j < a.Length; j++)
                {
                    a[j] = 0;
                }
                sw.Stop();
                Console.WriteLine("for " + sw.ElapsedTicks);
                sw.Reset();
                sw.Start();
                Array.Clear(a, 0, a.Length);
                sw.Stop();
                Console.WriteLine("Array.Clear " + sw.ElapsedTicks);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我机器上的输出:

for 1166
Array.Clear 80
for 1136
Array.Clear 91
for 1350
Array.Clear 71
for 1028
Array.Clear 72
for 962
Array.Clear 54
for 1185
Array.Clear 46
for 962
Array.Clear 55
for 1091
Array.Clear 55
for 988
Array.Clear 54
for 1046
Array.Clear 55
Run Code Online (Sandbox Code Playgroud)

所以Array.Clear大约快20倍for loop.但Array.Clear初始化为0.我能-1以某种方式将数组初始化为具有相同的性能吗?

upd:我不是在寻找一些"极端不安全"的代码.我正在寻找一些简单的东西Array.Clear.我只是想知道.NET提供快速0初始化,但.NET不提供其他值的初始化.那么为什么.NET比"-1"更像"0"呢?

upd我想重置现有的数组.所以我正在寻找模拟Array.Clear将数组重置为-1,而不是0

dod*_*der 5

可能有一种方法可以通过非托管数组(指针)将连续的内存块设置为相同的值(例如,当映射到其4字节内存时,无论int'-1'是什么).

这篇文章讨论了一个比托管for循环更快的方法(给出的例子是byte []数组):http: //techmikael.blogspot.com/2009/12/filling-array-with-default-value.html

另外,这里: C#中memset的等价物是什么?

正如其他海报所提到的那样,这样做似乎有点极端,通常使用for循环初始化数组所需的速度不会成为问题.