[C#] Applicatiesnelheid ophogen

Pagina: 1
Acties:

  • ThaAresX
  • Registratie: September 2010
  • Laatst online: 09-10 08:52
Beste tweakeraars,

Ik ben een student en beginnend met C#. Ik zit met een probleempje. Voor een applicatie moet ik gegevens uitlezen van een webservice. Dit doet mijn context klasse en set hiermee een Property. Constant word ook alleen deze property aangeroepen en niet de webservice opnieuw. Deze gegevens moeten in een ListBox komen. Dus de datasource voor die listbox is de property van mijn context en de displaymember is het Id. Nou heb ik een aantal testjes met een stopwatch gedaan, waarbij de totale loadtijd (wanneer de OnLoad() alles heeft uitgevoerd) 35 seconden was. Hieronder wat code die er op lijkt.

C#:
1
2
3
4
5
6
7
8
public class WebContext {
            public object[] array { get; set; }
            private WebService Service { get; set; }

            public WebContext() {
                array = Service.Fetch();
            }
        }

C#:
1
2
3
4
5
6
7
8
9
10
11
        public class WebRepo {
            private WebContext _wc { get; set; }

            public WebRepo() {
                _wc = new WebContext();
            }

            public object[] FetchFromService() {
                _wc.array;
            }
        }

C#:
1
2
3
4
5
6
7
8
9
10
11
        public class Controller {
            private WebRepo _wr { get; set; }

            public Controller() {
                _wr = new WebRepo();
            }

            public object[] FetchFromServce() {
                _wr.FetchFromService();
            }
        }

C#:
1
2
3
4
5
6
7
8
9
10
11
12
        public partial class Form1 : Form {
            private Controller _c { get; set; }

            public Form1() {
                _c = new Controller();
            }

            private void Form1_Load(object sender, EventArgs e) {
                listbox.DataSource = _c.FetchFromServce();
                listbox.DisplayMember = "Id";
            }
        }


Aan die listbox zit nog een SelectedIndexChanged event handler die verdere data in een datagrid zet.

Heeft iemand suggesties hoe ik dit kan oplossen? Of kan iemand mij vertellen wat ik hier fout doe of kan verbeteren?

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 11-10 23:51
Wat is 'Service'? Je doet 'Service.Fetch()' maar ik zie nergens gedefinieerd staan wat dat is.

Heb je je applicatie al eens iets selectiever geprofiled? Duurt het lang om de data op te halen of duurt het lang om het in je grid te renderen?

  • ThaAresX
  • Registratie: September 2010
  • Laatst online: 09-10 08:52
Avalaxy schreef op donderdag 10 december 2015 @ 14:57:
Wat is 'Service'? Je doet 'Service.Fetch()' maar ik zie nergens gedefinieerd staan wat dat is.

Heb je je applicatie al eens iets selectiever geprofiled? Duurt het lang om de data op te halen of duurt het lang om het in je grid te renderen?
Sorry je hebt gelijk, dacht al dat ik wat was vergeten. "Service" is het object van de webservice.

Heb nu verschillende stopwatches voor de algehele load, de SelectedIndexChange (incl data in datagrid zetten) en de call richting de webservice gemapt.

Resultaten:
Load : 00:00:37:6934357
Service call : 00:00:36:3660955
SelectedIndexChange : 00:00:01:8976211

  • qless
  • Registratie: Maart 2000
  • Laatst online: 11-10 14:21

qless

...vraag maar...

Lijkt dan op een trage service (kun je die nog wat benchmarken?) Als ik tijden > 30 seconden zie denk ik al heel snel aan DNS reverse lookup issues.

Zowieso externe services niet in je onload proberen inladen, maar via een backgroundworker

Website|Air 3s|Mini 4 Pro|Avata 2|Canon R6|Canon 5d2|8 fisheye|14f2.8|24f2.8|50f1.8|135f2|10-22|17-40|24-105|70-300|150-600


  • ThaAresX
  • Registratie: September 2010
  • Laatst online: 09-10 08:52
qless schreef op donderdag 10 december 2015 @ 15:50:
Lijkt dan op een trage service (kun je die nog wat benchmarken?) Als ik tijden > 30 seconden zie denk ik al heel snel aan DNS reverse lookup issues.

Zowieso externe services niet in je onload proberen inladen, maar via een backgroundworker
Heb nu de daadwerkelijke call vanuit me context getimed. Die komt neer op 00:00:08.7608552 seconden. Hoe kan ik die halve minuut dat deze array naar de UI wordt gestuurd laten verdwijnen?

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 19:54
Hoe veel data krijg je eigenlijk terug van die webservice? Zijn dat 10 items of meer in de duizenden?

  • ThaAresX
  • Registratie: September 2010
  • Laatst online: 09-10 08:52
Opgelost. Lange laadtijden kwam door het loopen door arrays in de objecten die ik terug kreeg, en in iedere loop een nieuwe call naar de webservice deed.

Webservice tijd: 00:00:04.3770680
Inladen in Listbox : 00:00:00.4759659
SelectIndexChange : 00:00:01.7262406
jip_86 schreef op donderdag 10 december 2015 @ 16:50:
Hoe veel data krijg je eigenlijk terug van die webservice? Zijn dat 10 items of meer in de duizenden?
Momenteel zo'n honderd objecten. Alleen die objecten bevatten weer arrays van andere objecten enz enz en uiteindelijk als ik een zooi arrays door ben heb ik de data die ik nodig heb.

[ Voor 43% gewijzigd door ThaAresX op 10-12-2015 16:53 ]


  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 11-10 23:51
4 Seconden is nog steeds behoorlijk fors voor "zo'n honderd objecten" :P Is dit ook zo traag als je een request doet met Fiddler, zonder het de deserialiseren en dergelijken?

  • ThaAresX
  • Registratie: September 2010
  • Laatst online: 09-10 08:52
Avalaxy schreef op donderdag 10 december 2015 @ 17:24:
4 Seconden is nog steeds behoorlijk fors voor "zo'n honderd objecten" :P Is dit ook zo traag als je een request doet met Fiddler, zonder het de deserialiseren en dergelijken?
Zal ik morgen even testen. Maar de array die ik terug krijgt zitten maar 100 objecten in. Maar in een individueel object zit ook weer een array, en deze array kan wel groot worden. In ieder geval ben ik al blij met de +- 4 seconden. Stagebegeleider had dezelfde laadtijden.

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Kortom, je doet niet 1 webrequest, maar misschien wel 101? En je doet je requests niet in parallel, maar je wacht op antwoord X voordat je verzoek X+1 uitstuurt? HTTP ondersteunt pipelining, en per RFC2616 mag je ook nog eens twee request streams in parallel gebruiken.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

Als hij net begonnen is met c# is async misschien nog net te abstract voor hem.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.

Pagina: 1