Search Issue Tracker

Won't Fix

Votes

0

Found in

6000.0.16f1

6000.1.0a7

6000.2.0a1

7000.0.0a1

Issue ID

UUM-77985

Regression

No

Slow synchronization primitives (lock, volatile, interlocked) on IL2CPP

-

*Steps to reproduce:*

Originally reported on Discussions here: [https://discussions.unity.com/t/poor-performance-of-synchronization-primitives-lock-volatile-interlocked-in-il2cpp/1489837]

 
{code:java}
int count;
public void TestNormal()
{
    [MethodImpl(MethodImplOptions.NoOptimization)]
    static void Incr(ref int v)
    {
        v++;
    }
    for (int i = 0; i < 100000000; i++)
    {
        Incr(ref count);
    }
}
public void TestVolatile()
{
    for (int i = 0; i < 100000000; i++)
    {
        Volatile.Write(ref count, Volatile.Read(ref count) + 1);
    }
}
public void TestInterlocked()
{
    for (int i = 0; i < 100000000; i++)
    {
        Interlocked.Increment(ref count);
    }
}
public void TestLock()
{
    for (int i = 0; i < 100000000; i++)
    {
        lock (this)
        {
            count++;
        }
    }
}
{code}
 

*Actual results:* 

Mono
{code:java}
normal: 142ms
volatile: 143ms
Interlocked: 347ms
lock: 1782ms{code}
IL2CPP
{code:java}
normal: 114ms
volatile: 1310ms
Interlocked: 990ms
lock: 6872ms{code}
.NET 8
{code:java}
normal: 23.43ms
volatile: 21.70ms
Interlocked: 343.34ms
lock: 1,305.52ms{code}
 

*Expected results:* 

*Reproducible with versions:* 

6.0 preview

*Tested on (OS):* 

Windows

  1. Resolution Note:

    Closing because of low priority and risk.

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.