forked from expertisesolutions/csharp-native-benchmarks
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Program.cs
64 lines (52 loc) · 2.23 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Runtime.InteropServices;
namespace csharp_native_benchmarks
{
class Program
{
static void Main(string[] args)
{
if (args.Length < 1)
{
Console.Error.WriteLine("Missing prefix");
Environment.Exit(1);
}
var domain = args[0];
helpers.Helper.WriteHeader();
for (int i = 0; i < 20; i++)
{
Iterate(domain, i);
}
}
static void Iterate(string domain, int iteration)
{
TimeSpan time;
var file = helpers.Helper.Open("/dev/null", "w");
for (int n = 10; n < 10000000; n *= 2)
{
time = helpers.Helper.Measure(() => benchmarks.DirectCsharpCall.StaticMethod("abc"), n);
helpers.Helper.Inspect(domain, iteration, "ManagedStatic", time, n);
var obj = new benchmarks.DirectCsharpCall();
time = helpers.Helper.Measure(() => obj.VirtualMethod("abc"), n);
helpers.Helper.Inspect(domain, iteration, "ManagedVirtual", time, n);
time = helpers.Helper.Measure(() => benchmarks.DirectDllImportCall.fprintf(file, "abc\n"), n);
helpers.Helper.Inspect(domain, iteration, "DllImportDirect", time, n);
time = helpers.Helper.Measure(() => benchmarks.CustomMarshalDllImportCall.fprintf(file, "abc\n"), n);
helpers.Helper.Inspect(domain, iteration, "DllImportCustomMarshaller", time, n);
}
var called = 0;
benchmarks.MethodCalledFromC.CompareFunc func = (IntPtr a, IntPtr b) => {
called += 1;
return (int)(a.ToInt64() - b.ToInt64());
};
for (uint n = 10; n < 10000000; n *= 2)
{
called = 0;
IntPtr data = benchmarks.MethodCalledFromC.PrepareData(n);
time = helpers.Helper.Measure(() => benchmarks.MethodCalledFromC.qsort(data, n, (uint)Marshal.SizeOf<int>(), func), 1);
helpers.Helper.Inspect(domain, iteration, "DllImportWithCallback", time, called);
Marshal.FreeHGlobal(data);
}
}
}
}