Перенос двойников без накладных расходов в CsharpC#

Место общения программистов C#
Anonymous
Перенос двойников без накладных расходов в Csharp

Сообщение Anonymous »

Я пытаюсь создать структуру, которая по сути является обычным двойником, но к которой с помощью дженериков прикреплена физическая единица.
Мои попытки работают ужасно, даже без дженериков. Может ли кто-нибудь подсказать мне, как я могу сделать это быстрее, если это вообще возможно, на C#?
Я использовал

Код: Выделить всё

public readonly struct MyDouble
{
public readonly double Value;

public MyDouble(double value)
{
Value = value;
}

public static MyDouble operator +(MyDouble self, MyDouble value)
{
return new MyDouble(self.Value + value.Value);
}

public static MyDouble operator *(MyDouble self, double value)
{
return new MyDouble(self.Value * value);
}
}

и хотя их простое создание, сохранение и извлечение происходит так же быстро, как и для двойных чисел, как только я использую операторы, производительность снижается по сравнению с необработанной двойной арифметикой.
Я думал, что это просто вопрос присоединения, но добавление к операторам атрибутов MethodImpl.AggressiveInlining совершенно не помогло.
Я проверил низкую производительность с помощью модульных тестов а также использование Dottrace JetBrain в производственных проектах.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -in-csharp

Вернуться в «C#»