Trädvy Permalänk
Medlem
Plats
Borlänge
Registrerad
Jul 2001

.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.

"May God stand between you and harm in all the empty places you must walk"

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007

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?

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Laholm
Registrerad
Okt 2005

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.

ASP.NET programmerare i C#
Twitter: http://www.twitter.com/hagbarddenstore

Trädvy Permalänk
Medlem
Plats
Borlänge
Registrerad
Jul 2001

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...

"May God stand between you and harm in all the empty places you must walk"

Trädvy Permalänk
Medlem
Plats
Laholm
Registrerad
Okt 2005

Du kan inte ens komma åt en MySQL server?

ASP.NET programmerare i C#
Twitter: http://www.twitter.com/hagbarddenstore

Trädvy Permalänk
Medlem
Plats
Borlänge
Registrerad
Jul 2001

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

"May God stand between you and harm in all the empty places you must walk"

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2004

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.

Trädvy Permalänk
Medlem
Plats
Borlänge
Registrerad
Jul 2001

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

"May God stand between you and harm in all the empty places you must walk"

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Maj 2007

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

Trädvy Permalänk
Medlem
Plats
Borlänge
Registrerad
Jul 2001

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)

"May God stand between you and harm in all the empty places you must walk"

Trädvy Permalänk
Medlem
Plats
Exil i huvudstaden
Registrerad
Jul 2004

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.

Crap.

Trädvy Permalänk
Medlem
Plats
Borlänge
Registrerad
Jul 2001

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

"May God stand between you and harm in all the empty places you must walk"