|
Заблокирован
|
|
Сравнение скорости вызова делегата без проверки на null и с проверкой07.07.2020, 12:08. Показов 2344. Ответов 28
Метки нет (Все метки)
Рекомендуется всегда использовать вызов делегата с проверкой на null
del?.Invoke(); (del - экземпляр делегата) Допустим, нужно сделать миллион итераций в цикле с вызовом делегата в теле цикла. Не внесет ли проверка на null существенной задержки по времени исполнения? Я сейчас проверил (в режиме отладки с пом точек остановки) - практически никакой разницы не заметил. Это нормально? То есть, всегда использовать вызов с проверкой?
0
|
|
| 07.07.2020, 12:08 | |
|
Ответы с готовыми решениями:
28
Проверка переменной делегата на null SQL запрос с проверкой на null Построить запрос с проверкой поля на NULL |
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|||||||
| 07.07.2020, 23:26 | |||||||
1
|
|||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 08.07.2020, 00:59 | ||||
|
Добавлено через 45 минут У меня эта проверка вообще под капот делегата засунута. Но у вас тут так нельзя - делегат в шарпе не разу не полноценный пользовательский класс.
2
|
||||
|
1531 / 533 / 127
Регистрация: 09.01.2018
Сообщений: 1,715
|
||
| 08.07.2020, 01:34 | ||
|
В общем виде один пустой делегат обходится дороже, чем проверка на null. При большом количестве событий, потери могут быть значительными. Проверка состояния объекта действие обычное, не выходящее за рамки программной логики. А создание объектов, которые ничего не делают - не совсем (хотя есть примеры, можно вспомнить Кнута с фиктивной ячейкой в массиве...). Из этих соображений, фиктивный делегат это и не альтернатива, а что то вроде трюка. Ну это мое личное мнение. Я думаю, что если объект ничего не делает, то он не должен создаваться. Не потому что ресурсы дороги или дешевы, а потому, что это нарушает логику.
0
|
||
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,733
|
||
| 08.07.2020, 06:37 | ||
|
Хотя я не оспариваю, что это дороже (по скорости выполнения) простой проверки. Тут, как бы, два стула: на одном упрощение кода и увеличение его надёжности, на другом - вопрос производительности. Где-то удобнее первый стул, где-то - второй. Даже среди моих коллег нет однозначного мнения.
1
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 08.07.2020, 14:38 | |||
|
Если смотреть с точки зрения ООП то как бы логично что абстракция "выполнить действие" конкретизируется объектом выполняющим конкретное действие "не выполнять никаких действий". А вот проверка состояний извне абсолютно нелогична - состояние это внутреннее дело объекта, и никто извне о них знать ничего не должен. Другое дело что манипуляция с заглушкой извне тоже не логична. Но тут оставаясь в рамках шарпа ничего не поделаешь. Абсолютно логичным с обеих точек зрения любой из этих способов может стать только после упаковки под капот делегату, при этом в случае варианта с заглушкой то только пи заселении самой заглушки константой в сегмент данных.
0
|
|||
|
Заблокирован
|
|
| 08.07.2020, 15:10 [ТС] | |
|
Честно говоря, не зная ни парадигм, ни паттеронов, я применял заглушки. Чтобы не было заморочек при отсутствии объектов, то есть при null. И даже придумал для своих объектов спец свойство, которое извещало бы реальный ли это объект или объект заглушка. Свойство инициировалось значением перечисления, содержащего два возможных значения: Empty - пустой объект и Full - наполненный (реальный).
P.S. Необходимость в таком подходе возникла ещё и потому, что эти объекты выполняли роль вложенных в другие объекты - как монетка вкладывается в кошелек. Если с отсутствием монетки ещё можно было смириться (проверкой на null) то с отсутствием кошелька - нельзя (по логике модели), а кошелек не мог существовать без монетки (по логике модели) вот и пришлось придумать пустые объекты (там ещё был и мешок для кошельков - как матрешка). Но всё это как-то не очень природоподобно вышло) ![]() Но работало
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 08.07.2020, 15:18 | ||
|
0
|
||
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,733
|
||
| 08.07.2020, 15:50 | ||
|
0
|
||
|
Заблокирован
|
|
| 08.07.2020, 16:20 [ТС] | |
|
В моем случае - вроде не особо криво было. Не беду углубляться детали. Там важно было, чтобы все сущности были - даже в случае отсутствия реальной монетки (или реального кошелька). А потом были обработки по нужным полям (свойствам) всех монеток во всех кошельках. И на этапе обработки почти не важно - реальная монетка или пустая. Не было там проверки на null или на Empty. Проверка на Empty была только в одном виде обработки (когда считалось сколько реальных монеток в каждом кошельке) - так что, вроде, ничего страшного. Главное, что обеспечивалось наличие всех кошельков и что в каждом кошельке хоть одна монетка есть (может Empty).
К сожалению или к счастью, c# позволяет одно и то же реализовать множеством способов. Для опытного программиста - это счастье (он выбирает близкий к оптимальному вариант). Для неопытного - головная боль (трудно понять что лучше - можно откровенный бред насоздавать - код всё стерпит и даже может работать).
0
|
|
| 08.07.2020, 16:20 | |
|
Соеденение двух таблиц с результирующим полем с проверкой на Null После повторного вызова фрагмента переменные становятся null Разница лямбда выражения, делегата (\анонимного делегата), методом (\анонимных методов) Оператор проверки на null Присвоение экземпляру объекта значения null вместо вызова метода Dispose() Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни
1. Механизм отложенного высвобождения фосфора
Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ
Реализована разная скорость. . .
|
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2.
Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
|
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её.
Всё это стресс конечно. Почему?. . .
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|