Цепочка функций в c # с использованием методов расширения для делегатов. Есть ли какие-либо последствия для производительности. Я публикую фрагмент кода с использованием - PullRequest
0 голосов
/ 23 октября 2019

Расширение делегата. Предложения и любые улучшения приветствуются. Этот код в настоящее время используется в одном из проектов.

internal static class xt
{
    public static Func<From, To> Next<From, To>(this From @obj, Func<From, To> transform)
    {
        return (fr) => transform(fr);
    }

    public static Func<Tform, TForward> Next<Tform, Tto, TForward>(this Func<Tform, Tto> g, Func<Tto, TForward> f)
    {
        return (tf) => f(g(tf));
    }

    public static Tto Input<Tfrom, Tto>(this Func<Tfrom, Tto> fx, Tfrom data)
    {
        return fx(data);
    }

    public static void Execute(this Action fx)
    {
        fx();
    }

    public static Func<Tform, Tto> Next<Tform, Tto>(this Func<Tform> g, Func<Tform, Tto> f)
    {
        return tf => f(g());
    }
}

enter image description here

1 Ответ

2 голосов
/ 23 октября 2019

Единственное, с чем вы сталкиваетесь с производительностью, является распределение памяти для делегатов. Тем не менее, они небольшие и недолговечные, будут жить в Gen0 и будут собраны в быстрой операции.

Я не думаю, что вы должны быть обеспокоены этим. Обычно в коде есть более опасные для производительности элементы - обработка строк, обработка массивов и т. Д.

...