Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
1
.NET 4.x

Упаковка и память. Разница скорости работы классов и структур

21.01.2014, 08:14. Показов 4090. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Если Int32 это структура и создается в стеке (никаких упаковок-распаковок), то почему тут на форуме проводя испытания на скорость выполнения, созданные классы с полями выполнялись быстрее таких-же структур?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2014, 08:14
Ответы с готовыми решениями:

Реализовать в виде библиотеки классов класс для работы с массивом структур
Срочно! Реализовать в виде библиотеки классов класс для работы с массивом структур....

Упаковка структуры не используя лишнюю память
Метод Marshal.StructureToPtr заключает в себя упаковку и передачу данных из управляемого объекта в...

Разница в скорости выполнения, итераторы
Википедия for (ContainerType::iterator it = C.begin(),end = C.end(); it != end; ++it) { ...

Разница в скорости выполнение программы C++ или C#
И так здравствуйте,хотелось бы узнать почему в данном случае(то есть использование stl) c++...

15
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
21.01.2014, 09:25 2
При классах тоже никаких упаковок-распаковок. О чем речь?
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
21.01.2014, 10:02  [ТС] 3
Если структура создаётся в стеке и она (по книжкам) быстрее, то почему создание класса и его выполнение в оперативной (по книжкам) памяти, быстрее? По результатам исследований с форума.

Добавлено через 13 минут
С упаковкой погорячился))
Глава книги так называется.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
21.01.2014, 10:23 4
Скорость работы структуры на стеке зависит от того как она используется в процессе работы.
В разных сценариях выполнения может быть быстрее как структура, так и класс.
Цитата Сообщение от skilllab Посмотреть сообщение
По результатам исследований с форума
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
21.01.2014, 10:47  [ТС] 5
Цитата Сообщение от pycture Посмотреть сообщение
В разных сценариях выполнения
Т.е. это уже получается конечный этап программирования? Оптимизация?

Гугла начитался
Если вам трудно сделать выбор между классом и структурой, выбирайте класс. В принципе, можете вообще забыть о пользовательских структурах, сама Microsoft так и советует отдавать предпочтение классам.
Да и кто-то тесты проводил.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
21.01.2014, 11:05 6
Цитата Сообщение от skilllab Посмотреть сообщение
Т.е. это уже получается конечный этап программирования? Оптимизация?
Нет. Это разные сценарии.
Для структур неприятно множественное протаскивание толстых структур через стек как аргументов при вызове функций.
Для классов множественное создание и уничтожение мелких объектов в пределах одной функции.
Да и кто-то тесты проводил.
http://ideone.com/xgIoQm , а могу и наоборот сделать. В другом тесте разумеется
0
16 / 16 / 4
Регистрация: 08.05.2013
Сообщений: 37
21.01.2014, 11:22 7
Цитата Сообщение от skilllab Посмотреть сообщение
Если вам трудно сделать выбор между классом и структурой, выбирайте класс. В принципе, можете вообще забыть о пользовательских структурах, сама Microsoft так и советует отдавать предпочтение классам.
пруф? структуры имею некоторые особенности, которые могут поставить в тупик программиста, но такой категоричный совет - забыть про них - совсем неправильный
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
21.01.2014, 11:31 8
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от skilllab Посмотреть сообщение
сама Microsoft так и советует отдавать предпочтение классам.
Цитата Сообщение от Charoplet Посмотреть сообщение
пруф?
Choosing Between Class and Struct:
As a rule of thumb, the majority of types in a framework should be classes.
There are, however, some situations in which the characteristics of a value type make it more appropriate to use structs.

CONSIDER defining a struct instead of a class if instances of the type are small and commonly short-lived or are commonly embedded in other objects.

AVOID defining a struct unless the type has all of the following characteristics:
It logically represents a single value, similar to primitive types (int, double, etc.).
It has an instance size under 16 bytes.
It is immutable.
It will not have to be boxed frequently.

In all other cases, you should define your types as classes.
То есть по дефолту — класс, а использование структуры нужно "оправдывать", что вполне логично.

Цитата Сообщение от Charoplet Посмотреть сообщение
такой категоричный совет - забыть про них - совсем неправильный
Разрешите подписаться.
3
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
21.01.2014, 11:59  [ТС] 9
Цитата Сообщение от kolorotur Посмотреть сообщение
использование структуры нужно "оправдывать"
Если приложение позволяет - то использование памяти и скорости - оправдание?

Добавлено через 2 минуты
Цитата Сообщение от pycture Посмотреть сообщение
Для структур неприятно
Может чего не так понимаю, но использование сборщика при "толстых" структурах - оправдание?
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
21.01.2014, 12:01 10
Цитата Сообщение от skilllab Посмотреть сообщение
Если приложение позволяет - то использование памяти и скорости - оправдание?
Простите, не совсем понял вопрос.
Эффективное использование памяти и скорости — конечно оправдание. Вы об этом?

Добавлено через 1 минуту
Цитата Сообщение от skilllab Посмотреть сообщение
использование сборщика при "толстых" структурах - оправдание?
Сборщик? Со структурами?
Это только при наличии запаковки такое может случиться.
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
21.01.2014, 12:02  [ТС] 11
kolorotur, ага.
В случае со структурами стек (возможно) будет быстрее внешней памяти?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
21.01.2014, 12:04 12
Цитата Сообщение от skilllab Посмотреть сообщение
Если приложение позволяет - то использование памяти и скорости - оправдание?
Может чего не так понимаю, но использование сборщика при "толстых" структурах - оправдание?
Разверните свой вопрос.
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
21.01.2014, 12:04  [ТС] 13
Цитата Сообщение от kolorotur Посмотреть сообщение
Сборщик? Со структурами?
простите, мой косяк. Запутался))
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
21.01.2014, 12:07 14
Цитата Сообщение от skilllab Посмотреть сообщение
В случае со структурами стек (возможно) будет быстрее внешней памяти?
Depends.
О каком конкретно "быстрее" идет речь?
Выделение памяти под экземпляр?
Запись в память?
Чтение из памяти?

В этом случае производительность стека и кучи сопоставима.

Потому при выборе структура/класс стоит вопрос о частоте создания и о частоте передачи между контекстами — в этих случаях выбор может повлиять на производительность.
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
21.01.2014, 12:12  [ТС] 15
pycture,
Может мне надо было с этого и начать чем сразу лезть в дебри.
Есть классы, полученные от COM сервера. Их удобно запихнуть в некий "массив" и его таскать по коду.
Предположим это будет координата точки (которая может быть представлена в виде отдельной структуры, реализацию которой в свою очередь, предоставляет COM сервер "Util.MathPoint"), 3 вектора, плоскость.

Добавлено через 2 минуты
Цитата Сообщение от kolorotur Посмотреть сообщение
вопрос о частоте создания и о частоте передачи
Создаётся раз в коде, обращение очень частое.
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
21.01.2014, 12:19 16
Цитата Сообщение от skilllab Посмотреть сообщение
Создаётся раз в коде, обращение очень частое.
Если постоянно "бросаете" из метода в метод или присваиваете локальным переменным (напр. var x = this.blabla), то лучше используйте класс — сэкономите на очень частом копировании.
1
21.01.2014, 12:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2014, 12:19
Помогаю со студенческими работами здесь

Разница с скорости процессоров у Mac, производительность
Всем привет! Друзья, очень глупый вопрос хочу спросить несмотря на то что я связан с...

Откуда такая разница в скорости выполнения кода?
Добрый день! Очень хочется понять, почему происходит следующее: Пишу код, который собирает данные...

Большая разница между POST и GET запросами в скорости?
Здравствуйте, сейчас заметил такую вещь: Отправка GET запроса: Как видим это заняло Overall...

Есть ли разница в скорости между Sata 3 и miniSata
Доброго времени суток . Собираюсь приобрести SSD в ноутбук , мне не нужен CD-привод и есть один...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru