|
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 6
|
|
.NET 4.x Ошибка с типом данных в программе22.11.2017, 20:26. Показов 1153. Ответов 6
Метки нет (Все метки)
В программе используется тип данных double, на форме строится график по вычисляемой переменной, и чем дальше он строится тем медленнее это происходит, а в определенный момент он просто останавливается. Я подозреваю тут дело в вычислении этой переменной и увеличении ее точности что в итоге переполняет память. Проект прикрепил. Нажмите старт в программе и начнет строится график (сбоку есть ползунок ускорения), он будет становится все медленнее и медленнее. Как мне это исправить? Округление Math.Round() не помогает.
0
|
|
| 22.11.2017, 20:26 | |
|
Ответы с готовыми решениями:
6
Ошибка в программе связанной с базой данных class <T> и Dictionary со свободным типом данных Расчет суммы. Точность вычисления с типом данных double |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 23.11.2017, 11:31 | |
Сообщение было отмечено ruyep как решение
Решение
У вас тип линии установлен на Spline — он будет очень сильно тормозить и гадить в кучу при большом количестве точек, потому что между каждыми двумя точками нужно будет высчитывать кривую.
Измените тип линии на Line — если количество точек превышает ширину графика в пикселях, то высчитывать кривые нет смысла. Еще лучше выбирайте наиболее подходящий тип линии динамически перед началом отрисовки — в зависимости от количества точек и размера графика в пикселях. Если точек немного, то можно использовать Spline для плавных линий, если количество точек начинает превышать ширину графика или опытным путем будет установлено, что после определенного количества точек начинаются тормоза, то меняйте тип на Line. При очень большом количестве точек используйте FastLine.
1
|
|
|
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 6
|
|
| 23.11.2017, 15:17 [ТС] | |
|
kolorotur, да спасибо, это повысило производительность, но всё же, тут ведь дело не в двух точках, чем длиннее становится график тем он медленнее отрисовывается, я думаю тут дело в типе данных с его громадной точностью. Может быть разбить вычисление и отрисовку на потоки или изменить тип данных на не такой громоздкий? Что вы думаете?
Добавлено через 11 минут kolorotur, потестировал, что на типе данных line что на fastline график хорошо рисуется, но доходя до отметки 1000 по вертикали он просто останавливается, я уверен тут все дело в типе данных и вычислении переменной. скрин
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||
| 23.11.2017, 15:22 | |||||
|
Когда вы добавили вторую точку, график отрисовывает первую и вторую точки и высчитывает кривую между ними. Когда вы добавили третью точку, график отрисовывает первую точку, вторую точку, высчитывает и отрисовывает кривую между ними, потом рисует третью точку, высчитывает и отрисовывает кривую. И так для всех тысячи точек: с добавлением новой отрисовываются и высчитываются с нуля все предыдущие. Расчет кривой для типа Spline — медленная и довольно серьезно мусорящая операция, потому не надо ее использовать для большого количества точек. Тем более не объясняет почему при тех же значениях но другом типе графика улучшается производительность. Добавлено через 1 минуту Там в нижней левой части окошка поле "Количество цыклов" (цикл пишется через "и") — в нем значение 1000, вот и генерируется тысяча точек.
0
|
|||||
|
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 6
|
||
| 23.11.2017, 15:46 [ТС] | ||
Добавлено через 8 минут Он строится довольно медленно как для отрисовки в 1 мс по таймеру, он должен быть молниеносен как по мне. Или может использовать другой, более точный инструмент для регулировки скорости отрисовки?
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 23.11.2017, 16:07 | |||
|
Немного странно видеть 4.342556475 медведя, но в техническом плане тип double выбран правильно — это именно тот тип, который ожидается в методе AddXY, вызываемом по таймеру. Был бы другой тип, то все равно пришлось бы его сначала конвертировать в double. Но даже если бы он мог выдавать такую точность, то посудите сами: по сути вы хотите выжать 1000 фпс при отрисовке графика. Не многовато? ![]() При минимальном интервале в 16мс получается фпс в районе 60-и, что вполне допустимо. График на 1000 точек отрисуется секунд за 17. Если вас не интересует "анимация" отрисовки, а просто хочется видеть конечный результат, то сначала рассчитайте значения всех точек, а потом разом "скормите" их графику.
1
|
|||
| 23.11.2017, 16:07 | |
|
Помогаю со студенческими работами здесь
7
Ошибка с типом данных date Ошибка с типом данных bool
Ошибка с типом данных после умножения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|