webForumDet fria alternativet

snabbaste sättet att fylla ett datagrid?

.NET

9 svar · 357 visningar · startad av Nöff

Medlem sedan nov. 2003569 inlägg
Frågan#1

Tjena..

vad är det snabbaste sättet att fylla ett datagrid, med kolumner.

typ:

kolumnerna:
1. namn
2. efternamn

vill inte använda ett datatable. . måste väl finna nån trevlig collection som är snabbare och som kan hantera kolumner?..

Medlem sedan apr. 20012 266 inlägg
#2

Det snabbaste sättet att fylla en DataGrid måste nästan vara direkt med en DataReader, alternativt att även fylla en egenhändigt komponerad Collection med data från en DataReader.

Medlem sedan nov. 2003569 inlägg
#3

Hmm.. borde skrivit att det inte är från en database. Jag ska bygga upp datat dynamiskt.

Medlem sedan apr. 20012 266 inlägg
#4

Då är väl collections det bästa alternativet, strukturat och snabbt så länge du bygger det så.

Medlem sedan nov. 2003569 inlägg
#5

Men då måste jag ju lägga in en hel klass för varenda rad jag har i en arraylist eller dyl... finns det inget snabbare?

Medlem sedan jan. 20012 204 inlägg
#6

Datatable är väl inte så långsamt.

Medlem sedan nov. 2003569 inlägg
#7

Nej det är den inte.. men jag vill veta det super-duper snabbaste sättet att fylla ett datagrid :)

det snabbaste som jag ser det är att deklarera en struct med ett antal variabler
och sen i sin tur initiera structen som en array.. men datagrid:et fixar ju inte detta.. den vill ju ha en IEnumerable för att öht kunna kirra upp datat. :l

Medlem sedan maj 20012 812 inlägg
#8

Du tycker det är jobbigt med klasser, men föreslår strukter själv. Skillnaden mellan dem är inget alls i det sammanhanget.

Strukten är lite bättre prestandamässigt, men inte enklare att jobba med. Och vill du ha IEnumerable så åker du på en klass.

Egentligen så kommer du inte märka någon skillnad på om du använder dig av en datatable/array/collection i prestanda, speciellt inte om du ändå tänker använda dig av en DataGrid i slutändan, då har du ändå inte optimal prestanda där, så de extra microsekunderna det tar att använda sig av en datatable istället för en array kommer du knappast att märka något av.

Det du missar med din Datatable istället för en collection är typsäkerheten och en del typcasting som måste ske när datan skall ut, men som sagt, du har garanterat andra ställen i din kod där du kan vinna mer i prestanda genom förändringar.

- M

Medlem sedan nov. 2003569 inlägg
#9

Du tycker det är jobbigt med klasser, men föreslår strukter själv. Skillnaden mellan dem är inget alls i det sammanhanget.

Jag tycker inte att det är jobbigt med klasser, var har jag skrivit det?. Structer är mindre och snabbare än klasser om man bara ska ha dem för att behålla värden. Denna fråga handlade om hur man fyller ett datagrid snabbast möjligt med programmatisk data. Därför behöver jag ett medel som datagrid:et kan itera igenom så snabbt och smidigt som möjligt.

Och vill du ha IEnumerable så åker du på en klass.

Jag vill inte ha IEnumerable, det är datagrid:et som vill ha det.

speciellt inte om du ändå tänker använda dig av en DataGrid i slutändan, då har du ändå inte optimal prestanda där,

Jag använder i princip alla datagrid:ets funktioner så jag kan inte byta till något annat.

Medlem sedan maj 20012 812 inlägg
#10

Men då måste jag ju lägga in en hel klass för varenda rad jag har i en arraylist eller dyl

det snabbaste som jag ser det är att deklarera en struct med ett antal variabler

Eftersom det inte är någon skillnad på en strukt och en klass hur de skapas och hur de skall användas i en collection så utgick jag från att du tyckte det var jobbigt att du måste skapa ett nytt objekt för varje rad, men inte en strukt och skillnaden är noll och ingen (mer än lite prestandavinst för strukten).

Jag vill inte ha IEnumerable, det är datagrid:et som vill ha det.

Tja, eftersom datagriden vill ha det, så vill ju du också ha det, annars så fungerar det ju inte :)

Denna fråga handlade om hur man fyller ett datagrid snabbast möjligt med programmatisk data. Därför behöver jag ett medel som datagrid:et kan itera igenom så snabbt och smidigt som möjligt.

Tja nu vet jag inte exakt hur datagriden använder sig av datan den får, men att den itererar igenom med hjälp av IEnumerable och reflektion är inte helt otänkbart, och i det fallet så spelar det inte så stor roll om du använder en ArrayList/Collection/DataTable. Eftersom prestandaförlusten inte ligger där utan i själva bindingingsmomentet till DataGriden och inte skapadent och hanteringen av datan.

I vilket fall som helst så som jag sa tidigare så finns det säkert viktigare ställen att jaga prestand på, det är dock spekulationer eftersom jag inte vet hur din applikation ser ut, men prestandavinsten är och kommer att förbli relativit liten.

- M

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)