Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET
Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij slevové akce 80% výuky zdarma!
birthday
Avatar
noName
Neregistrovaný
Avatar
noName:27.10.2013 9:00

Zdravím. Udělal jsem aplikaci s cca deseti pictureBoxy. Jenže když aplikaci roskliknu, trvá strašně dlouho, než se načtou všechny komponenty. Nevíte někdo jak tento proces urychlit, nebo jak by se to dalo jinak řešit?

 
Odpovědět
27.10.2013 9:00
Avatar
Odpovídá na noName
Jakub Lásko[Saarix]:27.10.2013 9:10

Obsahují komponenty obrazky, nebo jsou prázdné?

Nahoru Odpovědět
27.10.2013 9:10
Časem je vše možné.
Avatar
noName
Neregistrovaný
Avatar
noName:27.10.2013 9:13

Z počátku jsou prázdné, ale hned po inicializaci se tam načtou obrázky.

 
Nahoru Odpovědět
27.10.2013 9:13
Avatar
noName
Neregistrovaný
Avatar
noName:27.10.2013 11:57

Nevíš, zda to jde řešit například přes BackgroundWorker? Pokud ANO, tak jak?

 
Nahoru Odpovědět
27.10.2013 11:57
Avatar
Odpovídá na noName
Josef Kuchař - Pepa489:27.10.2013 20:57

A musí tam být tolik pictureboxů?

Nahoru Odpovědět
27.10.2013 20:57
2x piš, jednou debuguj
Avatar
noName
Neregistrovaný
Avatar
noName:28.10.2013 12:04

Ano, je potřeba načíst všech 10 PB současně.

 
Nahoru Odpovědět
28.10.2013 12:04
Avatar
Kit
Redaktor
Avatar
Odpovídá na noName
Kit:28.10.2013 12:06

Obávám se, že se do mého NTB celých 10 PB nevejde. Možná 100 GB :)

Nahoru Odpovědět
28.10.2013 12:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
noName
Neregistrovaný
Avatar
Odpovídá na Kit
noName:28.10.2013 12:25

hahaha... Ty mi nemůžeš pomoct?

 
Nahoru Odpovědět
28.10.2013 12:25
Avatar
Kit
Redaktor
Avatar
Odpovídá na noName
Kit:28.10.2013 12:29

V tomhle ti asi nepomůžu, tak jsem si alespoň trochu zatrollil.

Nahoru Odpovědět
28.10.2013 12:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na noName
Petr Nymsa:28.10.2013 12:31

Popiš přesněji program co má dělat. Kolik tam máš komponent ? Je potřeba je mít všechny inicializované hned ze začátku ? nešlo yb to rozdělit na více formů ? Proč tolik PictureBoxů ?

Nahoru Odpovědět
28.10.2013 12:31
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
noName
Neregistrovaný
Avatar
noName:28.10.2013 12:38

Představ si například mapu (form s pozadím mapy). A na mapě jsou pictureBoxy, které symbolizují body. Po kliknutí na daný bod (pB) se otevře nové okno (form) s informacemi o daném bodě. A jelikož jde ze startu vidět celá mapa, je potřeba, aby všechny pB byly inicializované současně hned ze startu.

 
Nahoru Odpovědět
28.10.2013 12:38
Avatar
Gramli
Redaktor
Avatar
Gramli:29.10.2013 8:14

Rozdělit to načítání dobrázků do více vláken-> 3 vlákna -> Main, BackgroundWorker1 a BackgroundWorker2. Každému BackgroundWorkeru dáš načíst 5 PB. (a bud se nactou soucasne, na to pouzijes RunWorkCOmplete Event, nebo se nactou tak jak je vlakna spracuji)

Pár odkazů - na netu je toho spousta, stačí googlit:)

http://www.dotnetperls.com/backgroundworker
http://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners
http://www.codeproject.com/Tips/83317/BackgroundWorker-and-ProgressBar-demo
http://www.dotneat.net/2009/02/10/BackgroundworkerExample.aspx
Nahoru Odpovědět
29.10.2013 8:14
Kdo to říká ten to je...
Avatar
noName
Neregistrovaný
Avatar
Odpovídá na Gramli
noName:29.10.2013 9:29

Je nějaký zásadní rozdíl mezi BackgroundWorkerem a Threadem? Myslím z hlediska vytížení procesoru. A jak mám přidělit BGW1 5 pBoxu, když ty se načítají z metody InitializeCom­ponent(). Děkuji.

 
Nahoru Odpovědět
29.10.2013 9:29
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na noName
Theodor Johnson:29.10.2013 9:35

BackgroundWorker má nižší prioritu (4) než normální thread (9), a normálně si ty pb odeber z designeru a přidej si je tam pomocí kódu

Nahoru Odpovědět
29.10.2013 9:35
Mo8ilε 15 Ѐλđ
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na noName
David Čápka:29.10.2013 10:21

Neměl bys tu mapu i s body spíše kreslit na 1 picturebox přes Graphics? Pokud tam máš desítky PB, tak se nediv, že to je pomalé.

Nahoru Odpovědět
29.10.2013 10:21
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
noName
Neregistrovaný
Avatar
Odpovídá na Gramli
noName:30.10.2013 14:09

Zkusiljsem hlavní program běžet na MainThreadu a inicializaci jsem provedl v bgWorker1. Je to sice o něco rychlejší, ale stále je to pomalé :( Tak jsem zkusil inicializaci provést v NewThreadu... Rychlost načítání je stejná a vytížení CPU je nižší. Jak je to možné?

 
Nahoru Odpovědět
30.10.2013 14:09
Avatar
Andrej Farkaš:30.10.2013 15:54

Myslím si, že najlepšie bude to vyriešiť tak ako píše sdraco cez graphics.

Nahoru Odpovědět
30.10.2013 15:54
Live. Love. Learn.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na noName
Jan Vargovský:30.10.2013 15:55

Jestli je to i přes BGW pomalé, tak rychlejší způsob nenajdeš. Inicializace pictureboxu je hold nákladná narežii :) jen mě napadá, to dělat paralelně tu inicializaci.

 
Nahoru Odpovědět
30.10.2013 15:55
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na noName
Jan Vargovský:30.10.2013 15:55

Jestli je to i přes BGW pomalé, tak rychlejší způsob nenajdeš. Inicializace pictureboxu je hold nákladná narežii :) jen mě napadá, to dělat paralelně tu inicializaci.

 
Nahoru Odpovědět
30.10.2013 15:55
Avatar
Motlja
Člen
Avatar
Motlja:30.10.2013 15:59

Nebo to mít komplexně v jednom pB a aby jsi to mohl rozkliknout tak si budeš hlídat x a y souřadnice

Nahoru Odpovědět
30.10.2013 15:59
Umím a učím se to co chci, to co mě baví a zajímá!!
Avatar
Josef Kuchař - Pepa489:30.10.2013 16:36

Jak říká sdraco, udělej to přes Graphics.

Nahoru Odpovědět
30.10.2013 16:36
2x piš, jednou debuguj
Avatar
Gramli
Redaktor
Avatar
Gramli:30.10.2013 16:38

Asi to nebude ideální řešení, ale metodu InicializeCom­ponent() si můžeš rozdělit na:

private void InicializeComponent()
{
//tady budes mit 5 pictureBocu
}

private void InicializeComponent1()
{
//tady budes mit dalsich 5 pictureBocu
}

kazdou inicializaci spustíš v jinem BGV. Myslim, ze to tak pude, ale vhodné řešení to asi není.

Editováno 30.10.2013 16:39
Nahoru Odpovědět
30.10.2013 16:38
Kdo to říká ten to je...
Avatar

Neregistrovaný
Avatar
Odpovídá na David Čápka
:30.10.2013 16:45

Přes Graphic to asi nepůjde... Ty body nejsou jen tečky, ale jsou to obrázky typu PNG... Například, kdyby byla mapa Evropy, tak na pozici Paříže by byl pictureBox Eiffelovy věže atd. Napadlo mě, že bych místo pBoxů použil labely, ale nevím, jestli je rozdíl mezi inicializací pBoxů a labelů...

 
Nahoru Odpovědět
30.10.2013 16:45
Avatar
Odpovídá na noName
Jakub Lásko[Saarix]:30.10.2013 16:45

Ještě by nebylo špatné zvážit využítí WPF, protože tam je vykreslování 5x-10x rychlejší.

Nahoru Odpovědět
30.10.2013 16:45
Časem je vše možné.
Avatar
noName
Neregistrovaný
Avatar
Odpovídá na Jakub Lásko[Saarix]
noName:30.10.2013 17:01

Ve WPF jsem zatím panic :D

 
Nahoru Odpovědět
30.10.2013 17:01
Avatar
Odpovídá na noName
Jakub Lásko[Saarix]:30.10.2013 18:30

Je to skoro úplně to samé a jsou tam třeba nové vychytané komponenty.

Nahoru Odpovědět
30.10.2013 18:30
Časem je vše možné.
Avatar
noName
Neregistrovaný
Avatar
Odpovídá na Jakub Lásko[Saarix]
noName:30.10.2013 19:43

A kdy tedy používat WF a kdy WPF? Je na to nějaké pravidlo?

 
Nahoru Odpovědět
30.10.2013 19:43
Avatar
Odpovídá na noName
Jakub Lásko[Saarix]:30.10.2013 19:45

Nejčastěji by se dalo říči toto: Když chceš vykreslovat (rychle) použij WPF, jinak stačí WP.

Nahoru Odpovědět
30.10.2013 19:45
Časem je vše možné.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jakub Lásko[Saarix]
Kit:30.10.2013 19:48

Ještě znám jedno pravidlo: Pokud je něco pomalé, odeber zbytečné komponenty.

Nahoru Odpovědět
30.10.2013 19:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na noName
Jan Vargovský:30.10.2013 19:50

Když umíš WPF, používej WPF. Pokud umíš WF, používej WF. Potom u větších aplikaci se doporučuje WPF, protože jsou výkonnější.

 
Nahoru Odpovědět
30.10.2013 19:50
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 30 zpráv z 30.