Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
32 / 12 / 5
Регистрация: 02.04.2022
Сообщений: 331

Эффективное обращение к данным

25.12.2023, 17:19. Показов 837. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возник вопрос, чисто из интереса, чисто для саморазвития.
Вот допустим у нас есть класс...

Условный StringHolder
C#
1
2
3
4
5
6
7
8
9
10
public class StringHolder
{
    public string Value { get; private set; } 
 
    public StringHolder(string tohold) 
    {
        Value = tohold;
        SomeTodoWithString(...);
    } 
}
При инициализации такого класса, в методе "SomeTodoWithString", на месте многоточия, что будет использовать эффективнее, переменную tohold или Value?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.12.2023, 17:19
Ответы с готовыми решениями:

Таймер и параллельное обращение к данным
Есть таймер, который срабатывает каждые 10 миллисекунд. Он вызывает метод А, который зачитывает данные из словаря D. Есть метод B, который...

Обращение к данным хостинга
Я создал программу и хочу сделать условия запуска В данном случае: private void Form1_Load(object sender, EventArgs e) { код }...

Обращение к данным из базы
Есть база данных на MS SQL из которой нужно получить данные в переменную из текущей записи из определенного поля! Подключение: String...

14
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
25.12.2023, 17:25
Цитата Сообщение от Timchik230 Посмотреть сообщение
что будет использовать эффективнее, переменную tohold или Value?
Переменную Span<char>. )
Если из предоставленных вами вариантов - то без разницы, если строка только для чтения.
0
 Аватар для Andrey-MSK
3313 / 2200 / 387
Регистрация: 14.08.2018
Сообщений: 7,404
Записей в блоге: 4
25.12.2023, 17:25
Цитата Сообщение от Timchik230 Посмотреть сообщение
или Value
Если будет это, конструктор будет такой - public StringHolder()

Упс, private set не углядел
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
25.12.2023, 17:26
Это просто две разные ссылки на один и тот же объект.
0
32 / 12 / 5
Регистрация: 02.04.2022
Сообщений: 331
25.12.2023, 17:29  [ТС]
IamRain, В теории, Value в памяти ближе к самому объекту, следовательно и обращаться к нему быстрее, разве нет?

Добавлено через 48 секунд
Так это же не ссылочной, а ByValue тип, откуда ссылки?
0
 Аватар для Andrey-MSK
3313 / 2200 / 387
Регистрация: 14.08.2018
Сообщений: 7,404
Записей в блоге: 4
25.12.2023, 17:35
Цитата Сообщение от Timchik230 Посмотреть сообщение
Так это же не ссылочной
String Класс

Добавлено через 5 минут
Timchik230, Строка неизменяема, но
C#
1
2
string _myString01 = "олыварпвлаоплвао";
string _myString02 = _myString01;
обе переменные ссылаются на один адрес в памяти.
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
25.12.2023, 17:40
Цитата Сообщение от Timchik230 Посмотреть сообщение
а ByValue тип, откуда ссылки?
Приехали. Следующая остановка - String класс. Don't lean on the door!

Цитата Сообщение от Timchik230 Посмотреть сообщение
теории, Value в памяти ближе к самому объекту, следовательно и обращаться к нему быстрее, разве нет?
Эта переменная хранит ссылку - управляемый указатель на область памяти в куче, которая, скажем так, одинаково медленно работает по сравнению с доступом к переменной в стеке.
В ассемблере это называется косвенная адресация (бывает еще непосредственная, и прямая, кажется) - надо сделать два прыжка, сначала на участок памяти, в котором хранится адрес (переменная Value); и еще один прыжок уже по адресу, который был прочитан из этой переменной.
А для данных в стеке мы просто сразу прыгаем на данные. Как-то так.

Добавлено через 3 минуты
Если формализовать, то это две операции чтения (для ссылочных типов) против одной операции чтения (для данных в стеке).
0
32 / 12 / 5
Регистрация: 02.04.2022
Сообщений: 331
25.12.2023, 18:06  [ТС]
IamRain, ладно хрен с этими стрингами, int то ByValue?
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
25.12.2023, 18:07
Timchik230, да.
0
32 / 12 / 5
Регистрация: 02.04.2022
Сообщений: 331
25.12.2023, 18:55  [ТС]
IamRain, подставим Int везде в примере вместо String
Теперь вопрос имеет вес?
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
25.12.2023, 23:42
Цитата Сообщение от Timchik230 Посмотреть сообщение
Теперь вопрос имеет вес?
Нет, не имеет. Сейчас тут производится копирование значения при передаче в метод. Неважно какая именно переменная - Value или tohold - будет передана в метод.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.12.2023, 23:59
Цитата Сообщение от Timchik230 Посмотреть сообщение
что будет использовать эффективнее, переменную tohold или Value?
Сколько раз в секунду будет вызываться этот конструктор?
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
26.12.2023, 03:07
Цитата Сообщение от kolorotur Посмотреть сообщение
Сколько раз в секунду будет вызываться этот конструктор?
наверное правильнее спросить "сколько раз будет обращение к public string Value { get; private set; }"

1. Технически Свойства -- это обертка над методом. Им подвластны все их преимущества и недостатки (например рекурсия). Если мерять прям количеством тактов -- передать параметр будет выгодней. Только это экономия на спичках. А учитывая что код в конструкторе -- больше вылезет проблема в том, как эффективно создавать столько объектов, а не то что вам нужно внутри обращаться через свойство. Ну в зависимости от кода, порой всё же стоит потерять на этом, но выиграть в гибкости кода.

2. Я не удивлюсь если компилятор при перфоманс сборке (по умолчанию это отмечено в Release) не проигнорирует любой вариант и влепит свой.

Короче -- не заморачивайтесь.
1
Эксперт .NET
 Аватар для Usaga
14096 / 9313 / 1349
Регистрация: 21.01.2016
Сообщений: 34,987
26.12.2023, 05:16
Лучший ответ Сообщение было отмечено Timchik230 как решение

Решение

Цитата Сообщение от Timchik230 Посмотреть сообщение
что будет использовать эффективнее, переменную tohold или Value?
По идее эффективнее был бы параметр метода, ибо геттер это метод (get_Value). По факту JIT вставит прямое обращение к неявному приватному полю и разница будет нулевая.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.12.2023, 12:59
Цитата Сообщение от Wolfdp Посмотреть сообщение
Только это экономия на спичках. А учитывая что код в конструкторе -- больше вылезет проблема в том, как эффективно создавать столько объектов, а не то что вам нужно внутри обращаться через свойство.
Ну вот я о том же.
Если код вызывается нечасто, то разницы никакой, а если часто, то выделение такого количества объектов и последующая работа сборщика сведут на нет любую экономию на инструкциях.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2023, 12:59
Помогаю со студенческими работами здесь

Обращение к данным из XML-файла
У меня есть рядом с экзешником программы XML-файл. В нем хранится буллева переменная. Так вот, мне надо из кода проверить тру она или фалс....

Обращение к данным которые формируются внутри Task
Добрый день! По мотивам парсера udp из этой темы https://www.cyberforum.ru/csharp-beginners/thread1379344.html Если работа с одним...

Обращение к данным в отчете FastReport по имени объекта
Доброго времени суток. Есть код: Report report = new Report(); Stream data = new...

Обращение к данным в БД. Ошибка: Объект не является ни ADODB.RecordSet, ни ADODB.Record
при созданиие приложения в коде у меня возникла ошибка подскажите суть проблемы string strConn, strSQl; ...

эффективное обращение со структурами
Всем привет. Есть структура: struct infoRecord { const char* szUid; const char* szName; const char* szSurname; const...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru