Пример #1
0
    public static void TestLocalsOneBlock()
    {
        var s1 = new ComplexStructWithExplicitLayout();

        s1.ObjectField               = new Reporter("s1.ObjectField", nameof(TestLocalsOneBlock));
        s1.AnotherObjectField        = new Reporter("s1.AnotherObjectField", nameof(TestLocalsOneBlock));
        s1.StructWithRef.ObjectField = new Reporter("s1.StructWithRef.ObjectField", nameof(TestLocalsOneBlock));
        var s2 = new SimpleStructWithExplicitLayout();

        s2.ObjectField = new Reporter("s2.ObjectField", nameof(TestLocalsOneBlock));
        var s3 = new SimpleStructWithAutoLayout();

        s3.ObjectField        = new Reporter("s3.ObjectField", nameof(TestLocalsOneBlock));
        s3.AnotherObjectField = new Reporter("s3.AnotherObjectField", nameof(TestLocalsOneBlock));
        var s4 = new SingleObjectStruct();

        s4.ObjectField = new Reporter("s4.ObjectField", nameof(TestLocalsOneBlock));
        var s5    = new StructWithoutObjectFields();
        var s6src = new SingleObjectStruct();

        s6src.ObjectField = new Reporter("s6src.ObjectField", nameof(TestLocalsOneBlock));
        var s6 = new SingleObjectStruct?(s6src);

        GC.Collect(2, GCCollectionMode.Forced);
        GC.WaitForPendingFinalizers();

        CheckSuccess();

        GC.KeepAlive(s1);
        GC.KeepAlive(s2);
        GC.KeepAlive(s3);
        GC.KeepAlive(s4);
        GC.KeepAlive(s5);
        GC.KeepAlive(s6);
    }
Пример #2
0
    public static void TestImplicitByrefsOneBlock()
    {
        var s1 = new ComplexStructWithExplicitLayout();

        s1.ObjectField               = new Reporter("s1.ObjectField", nameof(TestImplicitByrefsOneBlock));
        s1.AnotherObjectField        = new Reporter("s1.AnotherObjectField", nameof(TestImplicitByrefsOneBlock));
        s1.StructWithRef.ObjectField = new Reporter("s1.StructWithRef.ObjectField", nameof(TestImplicitByrefsOneBlock));
        var s2 = new SimpleStructWithExplicitLayout();

        s2.ObjectField = new Reporter("s2.ObjectField", nameof(TestImplicitByrefsOneBlock));
        var s3 = new SimpleStructWithAutoLayout();

        s3.ObjectField        = new Reporter("s3.ObjectField", nameof(TestImplicitByrefsOneBlock));
        s3.AnotherObjectField = new Reporter("s3.AnotherObjectField", nameof(TestImplicitByrefsOneBlock));
        var s4 = new SingleObjectStruct();

        s4.ObjectField = new Reporter("s4.ObjectField", nameof(TestImplicitByrefsOneBlock));
        var s5    = new StructWithoutObjectFields();
        var s6src = new SingleObjectStruct();

        s6src.ObjectField = new Reporter("s6src.ObjectField", nameof(TestImplicitByrefsOneBlock));
        var s6 = new SingleObjectStruct?(s6src);

        TestImplicitByrefsOneBlockInner(s1, s2, s3, s4, s5, s6);
    }
Пример #3
0
    public static void TestClassWrapperOneBlock()
    {
        var c1 = new Class <ComplexStructWithExplicitLayout>();

        c1.Field.ObjectField               = new Reporter("c1.Field.ObjectField", nameof(TestClassWrapperOneBlock));
        c1.Field.AnotherObjectField        = new Reporter("c1.Field.AnotherObjectField", nameof(TestClassWrapperOneBlock));
        c1.Field.StructWithRef.ObjectField = new Reporter("c1.Field.StructWithRef.ObjectField", nameof(TestClassWrapperOneBlock));
        var c2 = new Class <SimpleStructWithExplicitLayout>();

        c2.Field             = new SimpleStructWithExplicitLayout();
        c2.Field.ObjectField = new Reporter("c2.Field.ObjectField", nameof(TestClassWrapperOneBlock));
        var c3 = new Class <SimpleStructWithAutoLayout>();

        c3.Field.ObjectField        = new Reporter("c3.Field.ObjectField", nameof(TestClassWrapperOneBlock));
        c3.Field.AnotherObjectField = new Reporter("c3.Field.AnotherObjectField", nameof(TestClassWrapperOneBlock));
        var c4 = new Class <SingleObjectStruct>();

        c4.Field.ObjectField = new Reporter("c4.Field.ObjectField", nameof(TestClassWrapperOneBlock));
        var c5    = new Class <StructWithoutObjectFields>();
        var c6    = new Class <SingleObjectStruct?>();
        var s6src = new SingleObjectStruct();

        s6src.ObjectField = new Reporter("s6src.ObjectField", nameof(TestClassWrapperOneBlock));
        c6.Field          = new SingleObjectStruct?(s6src);

        TestClassWrapperOneBlockInner(c1, c2, c3, c4, c5, c6);
    }
Пример #4
0
    public static void TestImplicitByrefsOneBlockInner(
        ComplexStructWithExplicitLayout s1,
        SimpleStructWithExplicitLayout s2,
        SimpleStructWithAutoLayout s3,
        SingleObjectStruct s4,
        StructWithoutObjectFields s5,
        SingleObjectStruct?s6)
    {
        GC.Collect(2, GCCollectionMode.Forced);
        GC.WaitForPendingFinalizers();

        CheckSuccess();

        GC.KeepAlive(s1);
        GC.KeepAlive(s2);
        GC.KeepAlive(s3);
        GC.KeepAlive(s4);
        GC.KeepAlive(s5);
        GC.KeepAlive(s6);
    }