xamarin-macios/tests/perftest/ObjectCreation.cs

134 строки
3.4 KiB
C#
Исходник Обычный вид История

using System;
using Foundation;
using ObjCRuntime;
using BenchmarkDotNet.Attributes;
using Bindings.Test;
namespace PerfTest {
public class ObjectCreation {
[Register ("CustomClass")]
class CustomClass : NSObject { }
/* new NSObject () */
NSObject obj;
[Benchmark]
public object NSObjectCreation ()
{
return obj = new NSObject ();
}
[IterationCleanup (Target = nameof (NSObjectCreation))]
public void NSObjectCreation_Cleanup ()
{
obj.Dispose ();
}
/* new CustomClass () */
CustomClass custom_obj;
[Benchmark]
public object CustomClassCreation ()
{
return custom_obj = new CustomClass ();
}
[IterationCleanup (Target = nameof (CustomClassCreation))]
public void CustomClassCreation_Cleanup ()
{
custom_obj.Dispose ();
}
/*
* Runtime.GetNSObject ([[NSObject alloc] init])
*/
IntPtr NSObjectClassHandle = Class.GetHandle (typeof (NSObject));
NSObject native_nsobject;
[Benchmark]
public object NativeNSObjectCreation ()
{
var ptr = Messaging.IntPtr_objc_msgSend (Messaging.IntPtr_objc_msgSend (NSObjectClassHandle, Selector.GetHandle ("alloc")), Selector.GetHandle ("init"));
var obj = Runtime.GetNSObject (ptr);
Messaging.void_objc_msgSend (ptr, Selector.GetHandle ("release"));
return native_nsobject = obj;
}
[IterationCleanup (Target = nameof (NativeNSObjectCreation))]
public void NativeNSObjectCreation_Cleanup ()
{
native_nsobject.Dispose ();
}
/*
* id obj = [[NSObject alloc] init])
* [obj retain]
* Runtime.GetNSObject (obj)
* [obj release]
*/
NSObject native_nsobject_retain_release;
[Benchmark]
public object NativeNSObjectRetainReleaseCreation ()
{
var ptr = Messaging.IntPtr_objc_msgSend (Messaging.IntPtr_objc_msgSend (NSObjectClassHandle, Selector.GetHandle ("alloc")), Selector.GetHandle ("init"));
Messaging.void_objc_msgSend (ptr, Selector.GetHandle ("retain"));
var obj = Runtime.GetNSObject (ptr);
Messaging.void_objc_msgSend (ptr, Selector.GetHandle ("release"));
Messaging.void_objc_msgSend (ptr, Selector.GetHandle ("release"));
return native_nsobject_retain_release = obj;
}
[IterationCleanup (Target = nameof (NativeNSObjectRetainReleaseCreation))]
public void NativeNSObjectRetainReleaseCreation_Cleanup ()
{
native_nsobject_retain_release.Dispose ();
}
/*
* [[CustomClass alloc] init]
*/
IntPtr CustomClassClassHandle = Class.GetHandle (typeof (CustomClass));
[Benchmark]
public void NativeCustomClassCreation ()
{
var ptr = Messaging.IntPtr_objc_msgSend (Messaging.IntPtr_objc_msgSend (CustomClassClassHandle, Selector.GetHandle ("alloc")), Selector.GetHandle ("init"));
Messaging.void_objc_msgSend (ptr, Selector.GetHandle ("release"));
}
/*
* Runtime.GetNSObject ([[CustomClass alloc] init])
*/
NSObject native_customclass_surface;
[Benchmark]
public object NativeCustomClassSurfaceCreation ()
{
var ptr = Messaging.IntPtr_objc_msgSend (Messaging.IntPtr_objc_msgSend (CustomClassClassHandle, Selector.GetHandle ("alloc")), Selector.GetHandle ("init"));
obj = Runtime.GetNSObject (ptr);
Messaging.void_objc_msgSend (ptr, Selector.GetHandle ("release"));
return native_customclass_surface = obj;
}
[IterationCleanup (Target = nameof (NativeCustomClassSurfaceCreation))]
public void NativeCustomClassSurfaceCreation_Cleanup ()
{
native_customclass_surface.Dispose ();
}
}
}