Permalänk
Medlem

.net - snabb lista

Tjena, sitter och gör en applikation som kommer hantera mycket data men har litet problem med prestandan. Det är nämligen så att jag lagrar datat i en lista när jag skickar datat mellan datalagret och affärslagret. Problemet är att det tar mellan 200-400 gånger så lång tid att lägga in datat i en lista än det tar att hämta datat från databasen, så nu behöver jag lite hjälp. Hur ska jag göra för att få upp hastigheten i det här? Ursprungligen hade jag List klassen att lagra allt i, men jag vet att den inte är så där supersnabb, men jag har även provat LinkedList som ska vara snabb på att lägga in och läsa data, men det gav ingen boost. Finns det något annat bra sätt att lagra datat?

Vad har ni för tips?

EDIT: Testade lite till nu och jag ljög lite, det som tar tid är att gå igenom datareadern, det är det som tar 200-400 gånger så lång tid, inte att lägga in i listan. Så frågan ändras lite dit. Använder mig dessvärre av sqlite och kör därför SQLiteDataReader.Read() och det är den som tar tid och inget annat... Finns det något annat sätt att hämta datat? För att skynda på det lite, vill helst slippa cacha upp en massa data då datat i programmet kommer användas av flera samtidigt och uppdateras mycket.

Permalänk
Medlem

Att lägga in data i en lista är något av det snabbaste som finns, om du använder listan som en stack och lägger till elementen "framifrån". Det som tar tid i listor är att söka efter ett specifikt element.

Om du inte behöver söka så är en lista/stack helt klart rätt väg att gå. Om du däremot behöver söka efter specifika element rekommenderar jag en hashtabell istället.

Du kan alltid testa att implementera din egen lista; det är enkelt och en lite rolig övning

edit: sedär, jag läste inte hela meddelandet innan jag svarade. Du menar att det är att läsa själva result-setet från queryn som tar tid?

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Det är nog inte så mycket du kan göra åt saken. En tanke är, BYT DATABAS!!! SQLite är *INTE* anpassad för flera användare. Använd exempelvis MS SQL.

Permalänk
Medlem

hagbarddenstore:

1. har svårt att tro att det skulle hjälpa med hastigheten
2. Om jag kunde byta databas skulle jag göra det, men jag får inte installera en sql-server någonstans... Då har man inte mkt alternativ, MS SQL Compact eller vad den heter har andra saker som ställer till det...

Permalänk

Du kan inte ens komma åt en MySQL server?

Permalänk
Medlem

nope... det är det som är problemet

Permalänk
Medlem

SQLite stödjer väl att flera anslutningar kör SELECT-satser samtidigt... det är väl bara vid ändringar som databasen låses helt? INSERT, UPDATE etc.

Permalänk
Medlem

japp, precis så som den funkar... Men det hjälper mig inte nu

Permalänk
Medlem

Hur har du indexerat databasen? Är dina frågor optimalt ställda? Hittade den här frågan: http://sqlite.phxsoftware.com/forums/p/540/2329.aspx

Permalänk
Medlem

databasen är indexerad, frågorna bör vara bra ställda. Det tar bara ~1 sek att ställa samma fråga i SQLite Manager så problemet ligger i SQLite Wrappern (System.Data.SQLite)

Permalänk
Medlem

Som sagt, listor i sig bör vara snabba.

Du kan alltid prova med en ArrayList som du sätter initialt till en rimlig storlek. Så länge antal element inte överstiger initiala storleken bör denna lista vara väldigt snabb. Priset du betalar är minne, då jag misstänker att minne för hela listan baserat på storleken du angett allokeras.

Men det känns som det är något annat, som att du lyckas få in prestandasänkande anrop när du loopar igenom de värden du sätter in i listan eller oavsiktligt loopar igenom listan flera gånger.

Visa signatur

Crap.

Permalänk
Medlem

Japp, jag tror också det är något annat, ska prova mig lite fram, det är en tung sql-query så jag skulle tippa att det hänger på det