Является ли ValueTuple плохим выбором, если слишком много «полей» из-за его типа значения? - PullRequest
0 голосов
/ 11 декабря 2018

Поскольку я решил диверсифицировать себя с помощью Rust and Go, я стал чрезмерно беспокоиться о копировании / ссылках / перемещении и т. Д.

И недавно я действительно задумался, не страдают ли ValueTuple также от типичного предостережения structэто означает, что его размер не должен превышать 16 байт, чтобы избежать производительности при копировании типа значения здесь и там: https://stackoverflow.com/a/1082341/4636721

Так что, если, скажем, у нас есть кортеж значения (decimal, decimal, decimal, decimal), это означает, что мы лучшеотключить использование классического Tuple<decimal, decimal, decimal, decimal> класса для обхода этого кортежа?

[EDIT]

Пример варианта использования: допустим, приведенный ниже метод будет вызывать много

public (decimal, decimal, decimal, decimal) GetSuperImportantTuple(int input)
{
    var aParameter = GetAParameter(input);

    // Copy when getting that tuple
    var tuple = GetA4DecimalsValueTuple();

    // Copy into that function
    var anotherParameter = GetAnotherParameter(tuple);

    // Copy when returning the value
    return TransformValueTuple(tuple, anotherParameter);
}

1 Ответ

0 голосов
/ 11 декабря 2018

Как всегда, это зависит.Типы значений и ссылочные типы отличаются .Эта разница может иметь отношение к производительности.Однако вы также можете решить просто передать что-либо по ссылочному аргументу .Если вы хотите узнать, что действительно работает быстрее в данной ситуации, и как вы хотите его использовать, протестируйте его с помощью секундомера .Производительность, как правило, нужно измерять, а не спрашивать.

...