Jag har en tråd i min applikation som regelbundet (några ggr/dag) skall läsa ut url:er från databasen och sedan ansluta mot dessa.
Detta kan ju av förståeliga skäl ta lång tid (beroende på bandbredd, svarstider från servrar, osv.) Så nu undrar jag vad som är bäst ut prestanda-synpunkt?
Nu gör jag ungefär så här i min kod (pseudo-kod):
// Öppnar DB-koppling
Connection conn = new Connection();
ResultSet rs = conn.getResult("Select url from table");
while (rs.next())
{
// Här sker nätverksaktiviteten som kan ta lång tid
}
// Stänger DB-koppling
rs.close();
conn.close();
While-satsen kan i vissa fall ta 30 min och som koden ser ut nu så låser jag upp en databaskoppling under hela denna tid.
Kan det då vara bättre att göra så här:
// Öppnar DB-koppling
Connection conn = new Connection();
ResultSet rs = conn.getResult("Select url from table");
Collection coll = new Collection();
// Spara alla url:er i ett collection-objekt
while (rs.next())
{
coll.add(rs.get("url"));
}
// Stäng DB-koppling
rs.close();
conn.close();
// Utför det "tunga" jobbet.
for(int i=0; i<coll.size(); i++)
{
// nätverksaktivitet.
}
Vad är skillnaden på ett ResultSet-objekt och ett Collection-objekt (förutom att ResultSet håller en DB-koppling)??
Det kan ju röra sig om väldigt många url:er och då kanske risken är att Collection-objektet blir för stort och tar för mycket ram-minne? Sparar ResultSet-objektet också ned all data lokalt eller hämtar den datat från databasen först när det behövs? Jag vill ju inte fylla upp mitt RAM-minne totalt (och därmed sega ner resten av applikationen)
Jag vill alltså hitta den snabbaste och resurssnålaste lösningen, men jag vet inte riktigt vilken metod som är bäst?? Någon som har ett förslag?? :q