|
10 / 7 / 3
Регистрация: 25.02.2018
Сообщений: 86
|
||||||||||||||||
Как заставить блок try заработать?06.02.2019, 17:29. Показов 1501. Ответов 5
Метки обработка исключений (Все метки)
Была задача ускорить работу программы с высокопроизводительными вычислениями (функции, выраженные несобственными интегралами). Решил проделать мемоизацию (записать в словарь пары аргумент-значение), поскольку самая "тяжёлая" функция выполняла впустую одни и те же вычисления. Но программа не заработала из-за появляющегося сравнения с null, которое я никак не могу исправить. Пытался проверять на null, выполнял всё в главном потоке и т. п. - проблема не решилась. Тогда я решил просто ввести блок try таким образом:
Явно существует какая-то проблема со словарём, но я просто хочу закрыть на неё глаза. Сама функция M считает всё правильно и без вылетов даже в асинхронном режиме и т. п. Для использования словаря взял следующий класс:
0
|
||||||||||||||||
| 06.02.2019, 17:29 | |
|
Ответы с готовыми решениями:
5
Как заставить storuboard заработать через код VB Как заставить заработать код Слои в HTML или как заставить заработать z-index? |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||
| 06.02.2019, 19:10 | ||||
|
Никогда не ловите NullReferenceException — его возникновение указывает на баг в коде. Лучше найти ошибку. ![]() Лучше найдите причину возникновения сразу, пока не получили по шапке за баги от заказчика. Если не можете найти — выложите код, местные помогут.
0
|
||||
|
10 / 7 / 3
Регистрация: 25.02.2018
Сообщений: 86
|
|
| 06.02.2019, 19:29 [ТС] | |
|
Ошибка заключается в том, что в связи с использованием коллекции в каких-то внутренних методах коллекции возникает сравнение с полями элемента (Point.x, Point.y), который оказывается null.
Я думал, что проблема как-то связана с тем, что я делаю вычисления параллельно, поэтому стал использовать ConcurrentDictionary вместо Dictionary, но это не помогло. Я начал считать последовательно, но даже если считать в одном потоке, проблема останется. Я просмотрел код, значения Point нигде не могут равняться null, тем более они используются в дальнейшем как аргументы функции, обращающейся к полям Point.x, Point.y, которая хорошо работает, если не использовать коллекцию. Мне нужен способ обойти эту непонятную ошибку вызова исключения внутри блока try.
0
|
|
|
Администратор
|
|
| 06.02.2019, 23:37 | |
Сообщение было отмечено Дмитрий Паскаль как решение
Решение
Дмитрий Паскаль, открой окно Debug -> Stack Trace и посмотри откуда идет вызов. Скорее всего где-то в коде написано что-то вроде if (point != null).
1
|
|
|
10 / 7 / 3
Регистрация: 25.02.2018
Сообщений: 86
|
|
| 07.02.2019, 00:22 [ТС] | |
|
Спасибо!!!!
Оказалось, что была проверка типа point!=null && point.x == x ..., из-за чего почему-то вызывался встроенный в класс метод сравнения c точкой, а не сравнение по ссылке. Закомментировал, всё сразу заработало! Вычисления стали быстрее примерно в 5 раз!
0
|
|
|
Администратор
|
|||||||||||
| 07.02.2019, 17:13 | |||||||||||
|
Дмитрий Паскаль, он вызывался потому что для Point определен оператор != и запись
point != null означает вызов именно этого оператора. Все логично. Чтобы он не вызывался и сравнились ссылки нужно использовать ReferenceEquals или приводить к object
0
|
|||||||||||
| 07.02.2019, 17:13 | |
|
Помогаю со студенческими работами здесь
6
Как заставить свойство transition заработать одновременно на нескольких элементах? Не получается заставить заработать цикл с найденным значением Как заработать не умея программировать все же заработать . Проявите понимание ситуации, any advice ! как заставить блок не обтекать другой блок
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
На примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных выбран регистр накопления, в. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|