using System;
using System.Diagnostics;
using System.Text;
//using System.Runtime.CompilerServices;
namespace ConsoleApp
{
public class Program
{
const int iterations = 1000 * 1000 * 1;
static void Main()
{
// JIT precompile
int x = 0;
//Unsafe(&x, 1);
Safe(new int[1], 1);
SafeJI(new int[1], 1);
int size = 1024;
int[] array = new int[size];
var sw = new Stopwatch();
//sw.Restart();
//fixed (int* ptr = array)
//{
// Unsafe(ptr, array.Length);
//}
//sw.Stop();
//Console.WriteLine("Unsafe:\t{0}", sw.Elapsed);
sw = Stopwatch.StartNew();
SafeJI(array, array.Length);
sw.Stop();
Console.WriteLine("SafeJI:\t{0}", sw.Elapsed);
sw = Stopwatch.StartNew();
Safe(array, array.Length);
sw.Stop();
Console.WriteLine("Safe :\t{0}", sw.Elapsed);
//Console.ReadLine();
}
//static unsafe void Unsafe(int* array, int n)
//{
// for (int i = 0; i < n; i++)
// for (int j = 0; j < iterations; j++)
// array[i] = i;
//}
static void Safe(int[] array, int n)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < iterations; j++)
array[i] = i;
}
static void SafeJI(int[] array, int n)
{
for (int j = 0; j < iterations; j++)
for (int i = 0; i < n; i++)
array[i] = i;
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CnVzaW5nIFN5c3RlbS5UZXh0OwovL3VzaW5nIFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXM7Cm5hbWVzcGFjZSBDb25zb2xlQXBwCnsKCiAgICBwdWJsaWMgY2xhc3MgUHJvZ3JhbQogICAgewogICAgICAgIGNvbnN0IGludCBpdGVyYXRpb25zID0gMTAwMCAqIDEwMDAgKiAxOwoKICAgICAgICBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7CiAgICAgICAgICAgIC8vIEpJVCBwcmVjb21waWxlCiAgICAgICAgICAgIGludCB4ID0gMDsKICAgICAgICAgICAgLy9VbnNhZmUoJngsIDEpOwogICAgICAgICAgICBTYWZlKG5ldyBpbnRbMV0sIDEpOwogICAgICAgICAgICBTYWZlSkkobmV3IGludFsxXSwgMSk7CgogICAgICAgICAgICBpbnQgc2l6ZSA9IDEwMjQ7CiAgICAgICAgICAgIGludFtdIGFycmF5ID0gbmV3IGludFtzaXplXTsKCiAgICAgICAgICAgIHZhciBzdyA9IG5ldyBTdG9wd2F0Y2goKTsKCiAgICAgICAgICAgIC8vc3cuUmVzdGFydCgpOwogICAgICAgICAgICAvL2ZpeGVkIChpbnQqIHB0ciA9IGFycmF5KQogICAgICAgICAgICAvL3sKICAgICAgICAgICAgLy8gICAgVW5zYWZlKHB0ciwgYXJyYXkuTGVuZ3RoKTsKICAgICAgICAgICAgLy99CiAgICAgICAgICAgIC8vc3cuU3RvcCgpOwogICAgICAgICAgICAvL0NvbnNvbGUuV3JpdGVMaW5lKCJVbnNhZmU6XHR7MH0iLCBzdy5FbGFwc2VkKTsKCiAgICAgICAgICAgIHN3ID0gU3RvcHdhdGNoLlN0YXJ0TmV3KCk7CiAgICAgICAgICAgIFNhZmVKSShhcnJheSwgYXJyYXkuTGVuZ3RoKTsKICAgICAgICAgICAgc3cuU3RvcCgpOwogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiU2FmZUpJOlx0ezB9Iiwgc3cuRWxhcHNlZCk7CgogICAgICAgICAgICBzdyA9IFN0b3B3YXRjaC5TdGFydE5ldygpOwogICAgICAgICAgICBTYWZlKGFycmF5LCBhcnJheS5MZW5ndGgpOwogICAgICAgICAgICBzdy5TdG9wKCk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJTYWZlICA6XHR7MH0iLCBzdy5FbGFwc2VkKTsKCgogICAgICAgICAgICAvL0NvbnNvbGUuUmVhZExpbmUoKTsKICAgICAgICB9CgogICAgICAgIC8vc3RhdGljIHVuc2FmZSB2b2lkIFVuc2FmZShpbnQqIGFycmF5LCBpbnQgbikKICAgICAgICAvL3sKICAgICAgICAvLyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICAvLyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpdGVyYXRpb25zOyBqKyspCiAgICAgICAgLy8gICAgICAgICAgICBhcnJheVtpXSA9IGk7CiAgICAgICAgLy99CgogICAgICAgIHN0YXRpYyB2b2lkIFNhZmUoaW50W10gYXJyYXksIGludCBuKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGl0ZXJhdGlvbnM7IGorKykKICAgICAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB2b2lkIFNhZmVKSShpbnRbXSBhcnJheSwgaW50IG4pCiAgICAgICAgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGl0ZXJhdGlvbnM7IGorKykKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaTsKICAgICAgICB9CiAgICB9Cn0=