#44 C# WPF UI - Расширенная отладка

00:00 Введение и описание ошибки -Автор обнаружил ошибку в конце предыдущего видео и исправил её. -Проблема была решена несколькими строками кода. -Автор решил показать процесс исправления и новые методы отладки. 01:02 Откат кода и воспроизведение ошибки -Откат кода до момента исправления ошибки. -Демонстрация кода приложения XAML до и после исправления. -Использование задачи для воспроизведения ошибки в асинхронной системе. 02:29 Анализ обращений к базе данных Наблюдение за обращениями к базе данных во время работы приложения. Обнаружение ошибки, связанной с задержкой. Попытка устранить задержку для повторного воспроизведения ошибки. 03:17 Диагностика проблемы с подключениями -Обнаружение двух запросов на подключение. -Проверка наличия связующего утверждения. -Подтверждение наличия одной проблемы. 04:21 Проблема с внедрением зависимостей -Анализ асинхронного вызова загрузки. -Проблема с созданием новых экземпляров хранилища данных. -Решение проблемы с помощью scoped хранилища данных. 06:34 Проверка исправления Запуск программы после исправления. Обнаружение, что исправление не устранило проблему полностью. Продолжение отладки для выявления других возможных проблем. 07:51 Анализ стека вызовов -Обнаружение двух одинаковых вызовов при отладке. -Проверка стека вызовов и обнаружение двух задач, выполняющихся одновременно. -Вывод о неправильной блокировке. 09:51 Окончательная диагностика проблемы -Уточнение проблемы с повторным вызовом. -Ошибка в выражении для загрузки настроек. -Предположения о причинах проблемы и её исправлении. 11:08 Проблема с локальными переменными -При каждом вызове LoadAsync создаётся новая локальная переменная. -Компилятор может оптимизировать локальные переменные, сохраняя их в памяти на несколько циклов. -Решение: не фиксировать флаг обновления, так как это не требуется. 12:04 Простое решение -Команда «выполнить асинхронно» полностью разработана. -Необходимо передавать только свойство, которое нужно получить или установить. -Настройки внутри получателя или установщика объекта не выполняются. 12:39 Глобальная блокировка -Глобальная блокировка блокирует все вызовы, но занимает всего несколько наносекунд. -Создаётся защищённый объект mlock или mglobal lock. -Блокировка применяется ко всем вызовам, независимо от передаваемой собственности. 13:07 Проверка блокировки -Блокировка гарантированно срабатывает, но может привести к сбою, если получатель или установщик объекта выполняют длительные операции. -Блокировка настолько мала, что её практически невозможно заметить. 13:51 Итоги и выводы -Проблема решена, и решение является правильным. -Лямбда-выражение было дискретным и сложным для отладки. -Автор решил проблему за кадром, но решил повторить процесс в виде видео. 14:51 Заключение -Автор надеется, что видео было полезным. -Призывает задавать вопросы и оставлять комментарии

Иконка канала C# WPF Avalonia UI уголок
2 подписчика
12+
4 просмотра
4 дня назад
12+
4 просмотра
4 дня назад

00:00 Введение и описание ошибки -Автор обнаружил ошибку в конце предыдущего видео и исправил её. -Проблема была решена несколькими строками кода. -Автор решил показать процесс исправления и новые методы отладки. 01:02 Откат кода и воспроизведение ошибки -Откат кода до момента исправления ошибки. -Демонстрация кода приложения XAML до и после исправления. -Использование задачи для воспроизведения ошибки в асинхронной системе. 02:29 Анализ обращений к базе данных Наблюдение за обращениями к базе данных во время работы приложения. Обнаружение ошибки, связанной с задержкой. Попытка устранить задержку для повторного воспроизведения ошибки. 03:17 Диагностика проблемы с подключениями -Обнаружение двух запросов на подключение. -Проверка наличия связующего утверждения. -Подтверждение наличия одной проблемы. 04:21 Проблема с внедрением зависимостей -Анализ асинхронного вызова загрузки. -Проблема с созданием новых экземпляров хранилища данных. -Решение проблемы с помощью scoped хранилища данных. 06:34 Проверка исправления Запуск программы после исправления. Обнаружение, что исправление не устранило проблему полностью. Продолжение отладки для выявления других возможных проблем. 07:51 Анализ стека вызовов -Обнаружение двух одинаковых вызовов при отладке. -Проверка стека вызовов и обнаружение двух задач, выполняющихся одновременно. -Вывод о неправильной блокировке. 09:51 Окончательная диагностика проблемы -Уточнение проблемы с повторным вызовом. -Ошибка в выражении для загрузки настроек. -Предположения о причинах проблемы и её исправлении. 11:08 Проблема с локальными переменными -При каждом вызове LoadAsync создаётся новая локальная переменная. -Компилятор может оптимизировать локальные переменные, сохраняя их в памяти на несколько циклов. -Решение: не фиксировать флаг обновления, так как это не требуется. 12:04 Простое решение -Команда «выполнить асинхронно» полностью разработана. -Необходимо передавать только свойство, которое нужно получить или установить. -Настройки внутри получателя или установщика объекта не выполняются. 12:39 Глобальная блокировка -Глобальная блокировка блокирует все вызовы, но занимает всего несколько наносекунд. -Создаётся защищённый объект mlock или mglobal lock. -Блокировка применяется ко всем вызовам, независимо от передаваемой собственности. 13:07 Проверка блокировки -Блокировка гарантированно срабатывает, но может привести к сбою, если получатель или установщик объекта выполняют длительные операции. -Блокировка настолько мала, что её практически невозможно заметить. 13:51 Итоги и выводы -Проблема решена, и решение является правильным. -Лямбда-выражение было дискретным и сложным для отладки. -Автор решил проблему за кадром, но решил повторить процесс в виде видео. 14:51 Заключение -Автор надеется, что видео было полезным. -Призывает задавать вопросы и оставлять комментарии

, чтобы оставлять комментарии