.NET Compact Framework, проблемы с производительностью свойств и отслеживание изменений полей

У меня есть ситуация, когда я должен отслеживать ПЕРВЫЕ изменения, примененные к полю. Это относится к «некоторым» (10, если я не ошибаюсь) полям структуры, которые мне нужны, чтобы быть максимально эффективными (это структура, которая будет интенсивно использоваться для передачи информации между потоками для рендеринга/обновления данных; это структура передачи сообщений в основном).

В данном случае я говорю о компактной платформе xbox .net. Я слышал, что у свойств есть проблемы с производительностью, потому что они не встроены, поэтому мой вопрос:

Как лучше всего поступить в этой ситуации?

2 идеи:

1) Я отслеживаю первое изменение, внесенное в поле, поэтому я использую свойство, которое автоматически устанавливает битовое поле в 1, чтобы сказать: "Меня изменили !" (это битовое поле является частью одного int, так что это всего 4 байта накладных расходов), но я буду тратить все другие вызовы этого свойства, потому что они просто изменят значение, потому что бит уже установлен (до следующего кадра, очевидно, )

2) я вручную отслеживаю изменение поля (которое будет общедоступным, поэтому), устанавливая бит своими руками (возможностей ошибок больше, но оптимизировано)

Спасибо за любое предложение


person Francesco Belladonna    schedule 11.12.2010    source источник


Ответы (2)


Единственный «улучшенный» способ сделать (1), который я могу себе представить, - это использовать делегаты - сохранить две версии кода набора свойств, одну, которая устанавливает битовое поле, и другую, которая этого не делает. Затем заставьте свойство использовать вторую версию после установки бита. Таким образом, вы избежите накладных расходов на установку битового поля (но получите меньшие накладные расходы на вызов делегата).

person rsenna    schedule 11.12.2010
comment
Я протестировал решение, но простой вызов свойств в 3 раза медленнее, чем использование общедоступного поля ... и я не на компактной платформе, а на .net 4.0 (ну разница 649 тиков против 274), на Xbox360 это В 3,4 раза медленнее: 7734 тика против 2265... довольно высокие цифры по сравнению с компьютером! - person Francesco Belladonna; 11.12.2010
comment
Это не имеет прямого отношения к вопросу, но пользовательские операторы - это катастрофа с производительностью, если вы суммируете 2 вектора с перегруженными операторами вместо суммирования их X и Y, вы потеряете производительность на 100... что случилось с этой структурой?!?! - person Francesco Belladonna; 11.12.2010
comment
@Fire-Dragon-DoL: как насчет прямого вызова делегата без свойства? Тем не менее, если вы так сильно беспокоитесь о производительности, я думаю, вам следует оставаться в публичном поле... - person rsenna; 13.12.2010
comment
Я останусь с ними, это проблема с вызовами функций (я посмотрел в Интернете) ... так что все, что связано с вызовом функции, медленно (что они думали, что я не буду использовать функции в программе?-. -)... спасибо за ваше предложение кстати - person Francesco Belladonna; 16.12.2010

Как заявила rsenna, единственное решение, которое я нашел, — это оставаться с публичными полями или работать с функциями, не слишком беспокоясь о медленном выполнении. Для этого нет решения

person Francesco Belladonna    schedule 21.07.2011