|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Добрый день. Такая ситация: есть окно - на нём создаётся пользовательский контрол (Grid, Chart, Button-ы). В конструкторе этого контрола вызывается функция, которая подгружает данные в Chart. Происходит это синхронно и не очень быстро => окно приложения зависает. Из другого потока не получается: доступ к UI-элементу не из STA-потока-ошибка. Я попробовал так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
И опять же - Вызывающим потоком должен быть STA. Если просто Dispatcher.BeginInvoke - то выполняется не асинхронно. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
И - вызывающим потоком должен быть STA. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 22:21 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
mraklbrwПроисходит это синхронно и не очень быстро => окно приложения зависает. Из другого потока не получается: доступ к UI-элементу не из STA-потока-ошибка.Стандартный подход - получить данные асинхронно в DTO (долгая операция), затем быстро перегрузить в UI-контролы в потоке UI. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 22:29 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Либо воспользоваться паттерном MVVM - загрузить данные в модель представления, а представление само заберет изменения в нужном потоке ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 22:30 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Третий вариант - разберитесь почему данные к графику не готовы. Они не должны вычислятся. Это статистика уже прошедших событий. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 22:55 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Данные не вычисляются. Они добавляются на соответствующие области графика. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 23:02 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Что такое DTO? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 23:03 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
mraklbrwДанные не вычисляются. Они добавляются на соответствующие области графика.вопрос был почему долго. Какая разница добавляются или вытягиваются? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 23:14 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 23:28 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 23:28 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
mraklbrwфункция, которая подгружает данные в Chart.надо разделить наmraklbrwфункция, которая подгружаетиmraklbrwданные в Chart. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 23:29 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Попробовал так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
И вызываю функцию VeryLongMethod(). Выполняется не асинхронно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 12:26 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
mraklbrwИ вызываю функцию VeryLongMethod(). Выполняется не асинхронно.выполняется асинхронно, но не ждет окончания задачи, ибо async void. Вы бы почитали что-нить про работу с многопоточностью. А что касается задачи - еще раз. ДЛИТЕЛЬНУЮ операцию получения данных (что у вас там, загрузка из БД, загрузка из интернета и т.п.) нужно выполнить асинхронно (и не через async void) и сложить эти данные в DTO. А также произвести все манипуляции над ними. После этого в потоке UI присвоить все данные нужным свойствам вашего контрола. Эта операция должна быть произведена быстро, без всяких вычислений и т.п. - данные уже должны быть готовы. Тогда тормозов не будет ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 12:36 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
mraklbrwПопробовал так: это монолог а не диалог. - почему у меня 1000 строк показываются быстро в таблице. А у вас медленно? На вопросы не отвечаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 12:41 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
mraklbrwВ конструкторе этого контрола вызывается функция, которая подгружает данные в Chart.констуктор (а вообще это неверный подход) пусть принимает на вход данные, а не загружает их сам. А по хорошему, все данные контрол должен получить через свойства, а конструктор - быть без параметров ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 12:42 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
В конструкторе контрола почти ничего не делается. Создание контрола занимает примерно до 3 сек (тоже много, да). После этого вызывается функция констрола SetQuotes, в которой уже в Chart добавляются свечи из уже готового HashSet<Candle>, т.е. данные готовы - в течении 15 секунд они (6000 свеч примерно) загружаются в Chart. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Т.е. вот этот цикл и занимает кучу времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 12:58 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Ужас! mraklbrw Код: c# 1.
нафига тут ElementAt? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 13:02 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
HashSet<Candle> - quotes[i] - так обратиться нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 13:03 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
mraklbrw6000 свеч примерно дайте скрин свой или похожий из гугла. По 5 свечей на пиксель? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 13:04 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Почитайте, что такое Enumerator, как работает Linq и т.п. У вас проход по массиву quotes при 6000 элементах будет выполнен 6*6000 раз замените for на foreach немедленно! и никогда так больше не делайте! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 13:05 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
mraklbrwHashSet<Candle> - quotes[i] - так обратиться нельзя.потому что вообще не надо к нему обращаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 13:06 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 13:08 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Далее - вот это тутmraklbrw Код: c# 1.
нафига несколько раз? Что мешает сначала подготовить точку, а потом выполнять AddXY? И вообще, нельзя ли подготовить массив точек заранее (асинхронно), а потом присвоить его candleSeries.Points? (тут я не знаю, позволит ли это сделать чарт, но это было бы логично) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 13:12 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Shocker.ProПочитайте, что такое Enumerator, как работает Linq и т.п. У вас проход по массиву quotes при 6000 элементах будет выполнен 6*6000 раз замените for на foreach немедленно! и никогда так больше не делайте! Исправил, выполнение данного участка кода ~ 1-1.5 сек. Понял ошибку, действительно, было очень глупо, буду дальше смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 13:14 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
mraklbrw1-1.5 сек. Тогда, я так понял, топик решён. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 13:17 |
|
Асинхронная загрузка данных в Chart
|
|||
---|---|---|---|
#18+
Shocker.ProИ вообще, нельзя ли подготовить массив точек заранее (асинхронно), а потом присвоить его candleSeries.Points? (тут я не знаю, позволит ли это сделать чарт, но это было бы логично)Но даже если не позволит присвоить массив точек, все равно логично подготовить сначала массив точек вне конструктора, а в конструкторе его только добавить. Это то, о чем я твержу вам с самого начала - не надо получать данные внутри конструктора, надо их сначала подготовить, а потом грузить в контрол ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2018, 13:22 |
|
|
start [/forum/search_topic.php?author=Renaq&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
134ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 383ms |
total: | 647ms |
0 / 0 |