Ну, раз так
вяло пошлоАвтор: 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>>