|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|
Использование Struct в сценариях для классов. Можно ли избежать boxing?19.10.2013, 18:55. Показов 1336. Ответов 9
Метки нет (Все метки)
Здравствуйте. Есть сценарий, для которого идеально подходят классы, а именно:
-базовый класс с 5-7 наследниками. Эти классы содержат только поля. -полиморфный контейнер на основе базового класса -ну и, собственно, работа с полиморфным контейнером(в основном, на чтение и на linq запросы Any) Я знаю, что если в лоб заменить классы структурами, а базовый класс интерфейсом, то при моих сценариях (обращение к структуре через интерфейс) будет происходить boxing. сам вопрос: возможно ли как-то в данном сценарии заменить классы на структуры (с целью увеличения производительности), предотвратив при этом boxing при обращении к элементам полиморфного контейнера?
0
|
|
| 19.10.2013, 18:55 | |
|
Ответы с готовыми решениями:
9
а в ASP сценариях можно API функции вызывать Где можно почитать про использование классов в as3? Можно ли избежать цикла для вывода DW данных |
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
||||||||||||||||
| 19.10.2013, 23:00 [ТС] | ||||||||||||||||
|
Понятно. Да, от классов никуда не деться...тем более, что ещё очень кстати придутся различного рода Dictionary .А давайте уйдём немного от практики в сторону рассуждений)). Немного подумал и появилась идея сделать что-то типо
В принципе, такой вариант неплох. Но... (дальше рассуждения на основе обрывочных знаний о структурах C#, пожалуйста, исправляйте, если что-то не так) если я, опять же, сделаю, скажем
Вывод делаю такой, что подобный механизм может иметь право на жизнь только в рамках частого использования Foreach для массивов. Прокомментируйте, пожалуйста, мои догадки и исправьте ошибки))
0
|
||||||||||||||||
|
Master of Orion
|
||
| 19.10.2013, 23:10 | ||
|
IcyWind, работа со структурами всегда выше, чем с ссылочными типами. Даже если происходит копирование при присваивании. Запомните: преждевременные оптимизации - зло. Нужно реализовывать наиболее "чисто" все, что нужно. А когда все реализовано, можно и оптимизировать то, что нужно. Не перестаю приводить Фаулера:
0
|
||
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|||||||||
| 19.10.2013, 23:32 [ТС] | |||||||||
![]() сейчас именно этим и занимаюсь: программа уже работает и на реальных задачах обнаружились "узкие места". Как раз по схеме "третий подход к повышению производительности программы основан как раз на этой статистике" я и пытаюсь действовать ![]() Спасибо за замечание, что Но, как и сказано в книге,
в foreach тоже копия. Значит, был не прав ![]() а можно ли как-то использовать список структур без копирования? Или же для этого можно использовать только массивы?
0
|
|||||||||
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
||
| 20.10.2013, 00:14 [ТС] | ||
![]() 1.) Структуры, находящиеся в коллекциях являются неизменяемыми 2.) В случаи нахождения структуры в массиве или в отдельной переменной, изменять поля структуры можно, но всегда нужно помнить, что по-умолчанию, структуры передаются копированием. Лично я ещё не встречал ни одного случая, где бы потребовалось изменение структуры (уж очень я мало с ними работал). Но допускаю, что такие ситуации вполне могут иметь место
0
|
||
|
Master of Orion
|
|
| 20.10.2013, 00:36 | |
|
0
|
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|||||||
| 20.10.2013, 02:24 [ТС] | |||||||
|
Открыл для себя:
-Все дело здесь в том, что согласно спецификации, при обращении к полю только для чтения вне конструктора, генерируется временная переменная, для которой и вызывается метод IncrementX ох-хо-хох....а
-Однако если рассматриваемый выше массив привести к одному из его интерфейсов, такому как IList<T>, то вся уличная магия в виде генерации особых IL-инструкций останутся за бортом, и мы получим поведение, описанное в начале этого раздела. Добавлено через 1 час 14 минут к тому же уже и время позднее...вопрос снимается))
0
|
|||||||
| 20.10.2013, 02:24 | |
|
Помогаю со студенческими работами здесь
10
Отдельная таблица для каждого пользователя - можно ли избежать? Использование .h и .cpp для классов Использование классов для разделения кода Использование hover для дочерних классов Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|