|
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
|
|||||||||||
Что лучше, свойства с приватной переменной или автоматические свойства?23.07.2012, 11:21. Показов 14655. Ответов 21
Метки нет (Все метки)
Известно, что в классах свойства можно определить так:
А вот с недавнего времени хожу на одни курсы по C#, и у меня с тренером возникли немного споры по этому поводу... Многие меня упрекают, что я в классах понасоздавал лишние переменные вместо того, чтобы просто использовать автоматические свойства. Пожалуйста, помогите мне разобраться в чем я не прав...
0
|
|||||||||||
| 23.07.2012, 11:21 | |
|
Ответы с готовыми решениями:
21
Инкапсуляция, а именно автоматические свойства
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
||||||
| 23.07.2012, 11:41 | ||||||
|
Я раньше c++ изучал и тоже, как и ты сейчас, не могу никак смириться с принципом "зачем писать удобнее, если можно писать, чтобы работало быстрее". Но меня убеждают в обратном
![]() и, наверное, правильно делают. С# -это не язык для очень производительных приложений, хотя, некоторые инструменты для этого есть. я пошёл немного дальше вас. И решил сравнить не только свойства и паблик переменные (у вас прайвет, но я из кода доступ произвожу, а вы хотите из класса), но и сами структуры и классы вот вам программка, которая делает аналогичные опперации над классами и структурами с полями и свойствами. У меня структуры работают примерно в 20 раз быстрее. Причём, различия между структурами-свойствами и структурами-полями нет. А по классам - классы с полями работают на совсем чуть-чуть быстрее...около 2-3 процентов. Сейчас сижу на старом компе intel 4400 P.S. не забудьте, компилировать в режиме "Release", а не "Debug" жду ваших результатов
1
|
||||||
|
|
||
| 23.07.2012, 11:46 | ||
|
Автоматические свойства неявно создают поля. Умный JIT умеент инлайнить свойства, убирая лишний call.
Поэтому использовать ли свойство с backend полем или autopropery - вопрос coding style, и на него не может быть дан однозначный ответ. Добавлено через 4 минуты
1
|
||
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|||||||
| 23.07.2012, 12:01 | |||||||
0
|
|||||||
|
|
||
| 23.07.2012, 12:09 | ||
|
когда вы new вызываете - тогда точно выделяется память под новую переменную.
0
|
||
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
||
| 23.07.2012, 12:18 | ||
|
0
|
||
|
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
|
||||||||||
| 23.07.2012, 13:29 [ТС] | ||||||||||
|
1. Скорость работы с автоматическими свойствами в структур даже немного выше, чем доступ к полям(!!!). Я запускал программу несколько раз и скорость свойств всегда была выше, чем полей. То есть, если смотреть даже только на одно быстродействие, то их уже предпочтительнее использовать в структурах. 2. Быстродействие программы зависит от версии фреймворка, при том на очень внушительную цифру. Я пробовал компилить exeшник в разных версиях. На версиях 2.0, 3.0, 3.5 скорость практически одинакова(разница лишь ±1 секунда). А вот на четвертом фреймворке... короче цифры сами все говорят: (время наведено в секундах)
Что касается свойств в классах, то таки да, скорость практически такая же как и у полей(она лишь на несколько процентов ниже за доступ к полям). Выводы, которые можно из этих экспериментов сделать: 1. Если хотите, чтобы ваша программа быстрее работала, не понижайте версию FW из-за юзеров, которые ленятся его себе устанавливать, а используйте намного производительный FW4. 2. В структурах оптимальнее использовать свойства, чем поля (хоть это и противоречит сложившемуся использованию структур - поля в структурах и так публичные, там незачем свойства писать) 3. Можно использовать свойства в классах вместо полей. Падение скорости практически незаметное.
1
|
||||||||||
|
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
|
|
| 23.07.2012, 13:39 [ТС] | |
|
Очень хочется, чтобы кто-то еще протестровал разницу в скорости в 4-ой и 3-ей версии фреймворка и поделился своими результатами. Интересно, у всех ли такая большая разница в скорости.
0
|
|
|
|
||
| 23.07.2012, 13:46 | ||
|
Структуры не быстрее классов. Структуры всегда копируются полностью: при вызове метода, при возврате их из метода, что при больших размерах структуры - существенно. Стек-память имеет не более высокую скорость, чем куча, откуда вы такое взяли?
0
|
||
|
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
|
|||
| 23.07.2012, 14:00 [ТС] | |||
![]() Ну сами смотрите: чтобы узнать значение структуры, нужно обратиться к определенному адресу в пространстве стека. Все, значение мы имеем. Но чтобы достучаться к значению класса, нужно опять же сперва обратиться к определенному адресу в пространстве стека. Прочитать с этого места адрес, по которому хранится значение в куче. Найти этот адрес в куче, и только после этого мы получим значение. Может я в чем-то мелком допустился ошибки, но в общем так ведь все и происходит. Не так ли?
0
|
|||
|
123 / 121 / 6
Регистрация: 21.12.2011
Сообщений: 348
|
||||||
| 23.07.2012, 14:34 | ||||||
Машина: Intel I3 540, 4Gb RAM, Win7 x64 7601
2
|
||||||
|
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
|
|
| 23.07.2012, 14:40 [ТС] | |
|
Savvy, спасибо! У вас почти нет разницы в скорости от версии... только свойства структуры быстрее пашут на четвертой версии, это хорошо видно.
Интересно, почему у меня такая большая разница в скорости четвертой версии от других. Мне аж прям очень стало интересно, и объяснения этому что-то не нахожу)) А у вас какая ОСь и сколько бит?
0
|
|
|
123 / 121 / 6
Регистрация: 21.12.2011
Сообщений: 348
|
|
| 23.07.2012, 14:55 | |
|
1
|
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
||
| 23.07.2012, 15:41 | ||
|
0
|
||
|
|
||
| 23.07.2012, 17:13 | ||
|
Добавлено через 4 минуты IcyWind, Переделайте тогда уж тест, засекая время с помощью StopWatch, будут более объективные результаты.
0
|
||
|
Master of Orion
|
||||||
| 23.07.2012, 20:03 | ||||||
|
Я немного изменил методику тестирования, результаты ниже:
Первый скриншот - просто сделал (причем запускал из студии), второй - после перезагрузки, запускал экзешник
1
|
||||||
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
||
| 23.07.2012, 21:46 | ||
|
1
|
||
|
1 / 1 / 0
Регистрация: 07.05.2012
Сообщений: 16
|
|
| 07.10.2013, 21:24 | |
|
я чего то не пойму, зачем создавать наследуемый конструктор?
public MyPropStruct(int i, string s) : this()
0
|
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
||
| 07.10.2013, 21:34 | ||
|
Если ты копируешь код в студию (удалив его вызов) и попробуешь запустить, то получишь очень содержательное сообщение об ошибке) копирую сюда: Ошибка Резервное поле для автоматически реализованного свойства"MyPropStruct.Val" должно быть полностью определено до возврата управления в вызывающий метод. Попробуйте использовать вызов конструктора по умолчанию из инициализатора конструктора. и туда же Ошибка Невозможно использовать объект this, пока не будут назначены все его поля
0
|
||
|
Заблокирован
|
||
| 07.10.2013, 23:20 | ||
|
Со временем производительность перестала быть узким местом в программировании, а на первый план вышли концептуальные понятия, удобство, и главное скорость написания большого объема кода. Но некоторые так и остались в тех же временах, изобретают велосипеды, тешатся мнимой производительностью, пишут на языках 80х-90х годов (привет с,с++) и т.д. Для тебя реализация- черный ящик, стало быть и вопросы эти не должны заботить.
1
|
||
| 07.10.2013, 23:20 | |
|
Помогаю со студенческими работами здесь
20
Создать Generic Mapper, который будет мапить схожие свойства одного объекта в свойства другого
Как лучше организовать присвоение свойства какого-либо класса Получить значение свойства объекта по значению в переменной string Будет ли корректным вызывать внутри методов get или set другие функции или менять свойства контролов? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
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
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|