Ну, раз так
вяло пошлоАвтор: Sinix
Дата: 25.04.16
— упростим ещщё.
public enum SomeEnum { A, B, C }
public struct MyStruct : IEquatable<MyStruct>, IComparable<MyStruct>
{
public SomeEnum MyField { get; }
public MyStruct(SomeEnum myField)
{
MyField = myField;
}
public bool Equals(MyStruct other)
{
return MyField.Equals(other.MyField);
}
public int CompareTo(MyStruct other)
{
return other.MyField.CompareTo(MyField);
}
public override bool Equals(object obj)
{
return obj is MyStruct && Equals((MyStruct)obj);
}
public override int GetHashCode()
{
return MyField.GetHashCode();
}
}
Как всегда, вопрос стандартный: где я налажал и как с этим жить

В смысле, найти-поправить косяки в плане производительности. Желательно с пруфами в виде циферок, а то весь педагогический эффект пропадает
Просьбы тож стандартные:
1. Спойлеры — под кат!

2. Подключайтесь

Не всё ж мне одному вопросы выдумывать
Здравствуйте, Sinix, Вы писали:
S>Как всегда, вопрос стандартный: где я налажал и как с этим жить
| | Скрытый текст |
| | Боксинг на вызовах Equals, CompareTo и GetHashCode. Компилятор шарпа при использовании численных операции с перечислениями приводит их к базовому типу. Кстати, это хорошо видно при генерации Expression.
Исправить соответственно просто: надо использовать либо приямые операции такие как +-&|, либо приводить их к базовому типу и вызывать уже соответствующие методы у них (Equals, CompareTo и GetHashCode)
MyStruct1: Elapsed: 74 ms, GC 0/1/2: 57/0/0
MyStruct2: Elapsed: 2 ms, GC 0/1/2: 0/0/0
|
| | |
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Здравствуйте, Sinix, Вы писали:
S>Угу. И ещё один косяк остался. Чисто логический.
| | spoiler |
| | Перевернутое сравнение в компараторе? Но, это ведь может быть и by design. |
| | |
Здравствуйте, Lexey, Вы писали:
S>>Угу. И ещё один косяк остался. Чисто логический.
L> | | spoiler |
| | L>Перевернутое сравнение в компараторе? Но, это ведь может быть и by design.
|
| | |
| | Скрытый текст |
| | Я когда переписал MyStruct для проверки производительности на автомате исправил и первую и исправленную (MyStruct2) версию, мало ли где и как код набирался и с какими копипастами, и как-то не подумал, что это специально сделано  |
| | |
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>