Информация об изменениях

Сообщение Re[5]: Oberon vs C# от 12.04.2024 16:55

Изменено 12.04.2024 16:56 Serginio1

Re[5]: Oberon vs C#
Здравствуйте, _FRED_, Вы писали:


S>>Ух ты еще и делегат пришпандорил!

_FR>
S>>                Swap(ref a[j + 1], ref a[j]);

S>>//[MethodImpl(MethodImplOptions.AggressiveInlining)] можно попробовать. Хотя и так должен быть инлайнинг
S>>     void Swap(ref double x, ref double y)
_FR>


_FR>Это не делегат, а обычная локальная функция.


То что выше это локальная функция, которую я предложил вместо.

static void Sort(double[] a)
{
    var Swap = (ref double x, ref double y) =>
    {
        var t = x;
        x = y;
        y = t;
    };

    for (var i = 0; i < a.Length; i++)
        for (var j = 0; j < a.Length - 1 - i; j++)
            if (a[j + 1] < a[j])
                Swap(ref a[j + 1], ref a[j]);
}


https://stackoverflow.com/questions/40943117/local-function-vs-lambda-c-sharp-7-0

Смотри TestLambda
Re[5]: Oberon vs C#
Здравствуйте, _FRED_, Вы писали:


S>>Ух ты еще и делегат пришпандорил!

_FR>
S>>                Swap(ref a[j + 1], ref a[j]);

S>>//[MethodImpl(MethodImplOptions.AggressiveInlining)] можно попробовать. Хотя и так должен быть инлайнинг
S>>     void Swap(ref double x, ref double y)
_FR>


_FR>Это не делегат, а обычная локальная функция.


То что выше это локальная функция, которую я предложил вместо.

static void Sort(double[] a)
{
    var Swap = (ref double x, ref double y) =>
    {
        var t = x;
        x = y;
        y = t;
    };

    for (var i = 0; i < a.Length; i++)
        for (var j = 0; j < a.Length - 1 - i; j++)
            if (a[j + 1] < a[j])
                Swap(ref a[j + 1], ref a[j]);
}


Там явно проблема с инлайнингом.

https://stackoverflow.com/questions/40943117/local-function-vs-lambda-c-sharp-7-0

Смотри TestLambda