---
title: "Optimera kod!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/70374-optimera-kod"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "aleborg"
published: "2003-03-07T13:05:44.000Z"
updated: "2003-03-08T12:31:19.000Z"
replies: 10
views: 672
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/70374-optimera-kod"
---

# Optimera kod!

## #1 — aleborg, 2003-03-07T13:05Z

Jag håller på att diskutera med en kund som har missat en del stängningar av databasen(MySQL). Jag gav ett exempel på smidig kod som jag anser vara optimerad! Kunden tyckte min var krånglig eftersom att man måste komma ihåg indexet i arrayn istället för \<%=RS("Adress")%\>. Han frågade mig vilken jag tyckte var smidigast av följande:

Kundens kod:

Variant 1:

```
<%
Connection-sträng
SQL-fråga
' 10-20 rader HTML-kod
Connect.Close
Connection-sträng
SQL-fråga
' 10-20 rader HTML-kod
Connect.Close
Connection-sträng
SQL-fråga
' 10-20 rader HTML-kod
Connect.Close
%>
```

Variant 2:

```
<%
Connection-sträng
SQL-fråga
' 10-20 rader HTML-kod
SQL-fråga
' 10-20 rader HTML-kod
SQL-fråga
' 10-20 rader HTML-kod
Connect.Close
%>
```

Min kod såg ut så här:

```
Funktionen samt connstr lägger du i en include
<%
'Hämta databas info
'-------------------------------------------------------------------------------
Function getDbRows( strCon, strSql )

                 Set Conn = Server.CreateObject("ADODB.Connection")
                 Conn.Open strCon

                 Set RS = Conn.Execute( strSql )
                 If RS.EOF Then
                         rader=null
                 Else
                         rader = RS.getrows
                 End If
                                
                 RS.close
                 Set RS = Nothing
                 Conn.Close
                 Set Conn=Nothing

                  getDbRows = rader

End Function

‘Databas sträng(koppling)
'--------------------------------------
connstr = "Driver={Mysql};Server=localhost;Database=databasen;UID=Användarnamn;PWD=lösenord"

 minArray = getDbRows(connstr, "Select Namn, Adress From Users")

If not IsNull(minArray) Then 
                 For i = 0 To Ubound(minArray,2)
%>
                 Namn: <%=minArray(0,i)%>
                 Adress: <%=minArray(1,i)%>
<%
Next
Else %>
Tomt I databasen
<% End If %>
```

Och självklart ska man Dimma allt!
Vad anser ni?

Permalänk: https://www.webforum.nu/p/70374

## #2 — erka, 2003-03-07T13:29Z

Personligen gillar jag getrows, fungerar snabbt.Dock krångligt att se vad det är man skriver ut ibland. Av kundens alternativ är ju alternativ 2 det mest kloka,dumt att öppna databasen och stänga den hela tiden, tar mer prestanda

Permalänk: https://www.webforum.nu/p/969873

## #3 — m_soderlund, 2003-03-07T14:27Z

Din använder ju GetRows vilket är en fördel om databasen är stor. Men om du bara hämtar ut två fält kanske Recordset är bättre? Testa dig fram och mät tiden för exekvering med eller utan GetRows.

Permalänk: https://www.webforum.nu/p/969948

## #4 — mrblonde, 2003-03-07T14:33Z

en grej man kan göra är att skapa constanter som heter som fälten i databasen och ge dem värdet av samma fält i arrayen, då ser man rätt tydligt vad man hämtar i sin array och det ger en väldigt liten prestanda förlust. För att öka tydligheten.

Har för mig att det har diskuterats tidigare och att det finns en artikel på <https://www.4guysfromrolla.com> om detta.

Permalänk: https://www.webforum.nu/p/969954

## #5 — Erik Juhlin, 2003-03-07T15:10Z

Jo, men om man returnerar recordsetet från ett com-objekt då? Ska man returnera ett dictionary med siffrorna då?

Blir inte det lika långsamt och ganska mycket krångligare då?

Dessutom så är det ju inte alltid GetRows är snabbare och inte ofta det ger någon större förbättring.

Se bara till att använda frånkopplade recordsets.

Permalänk: https://www.webforum.nu/p/970000

## #6 — mrblonde, 2003-03-07T15:21Z

> **Erik Juhlin skrev:**
>
> Jo, men om man returnerar recordsetet från ett com-objekt då? Ska man returnera ett dictionary med siffrorna då?
> 
> Blir inte det lika långsamt och ganska mycket krångligare då?

Det var väl mest en allmän idé man kan använda sig av i vissa fall och inte en universallösning jag hade :)

Permalänk: https://www.webforum.nu/p/970010

## #7 — jupiters, 2003-03-08T02:46Z

Here are some sample benchmarks for three runs using 
each method (not done under a controlled environment
 but close enough to prove the point!): 

\---------------rs("fieldname")  rs(x) 'set method' 
Results: (in seconds)  2.967 1.650 0.586 
Results: (in seconds)  2.824 1.611 0.602 
Results: (in seconds)  2.893 1.613 0.594 
\-----------Average:  2.895 1.625 0.594

<http://www.4guysfromrolla.com/webtech/120899-1.shtml>

Permalänk: https://www.webforum.nu/p/973372

## #8 — PatrikB, 2003-03-08T09:38Z

sälv har jag en annan variant:

```
'## -- skapa en global connection för hela sidan --

'## -- sql-fråga --
'## -- hämta poster som array --

'## -- sql-fråga --
'## -- hämta poster som array --

'## -- sql-fråga --
'## -- hämta poster som array --

'## -- stäng connection när jag har hämtat allt som behövs --

'## -- börja loopa igenom arrayerna på rätt ställe --

'## -- FUNCTIONERNA I EN INCLUDE FIL --
```

funktionen för att hämta records som array:

```
Function GetDbRows(query, cnn)
	Dim rst
	Set rst = cnn.Execute(query)
		If rst.EOF Then
			GetDbRows = null
		Else
			GetDbRows = rst.GetRows()
		End If
	Set rst = Nothing
End Function
```

likadant har jag funktioner (metoder) för att skapa connection, recordset (både vanliga och adodb.recordsets)

Mest optimerat? ... klart enkelt att "administrera" med en vettig felhantering.

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/973402

## #9 — Erik Juhlin, 2003-03-08T10:31Z

Om man kollar på 4GuysFromRolla så tycker man ju att rs(0).Value borde vara lika snabbt som det senaste då.

Permalänk: https://www.webforum.nu/p/973423

## #10 — PatrikB, 2003-03-08T12:29Z

Blir till att testa lite granna efter 4Guys modellen.

Tur man har "real world" info att testa med

cya,
/PatrikB

Permalänk: https://www.webforum.nu/p/973473

## #11 — PatrikB, 2003-03-08T12:31Z

En annan sak som speedar upp hämtningar är att begränsa max antal poster som returneras. Till det krävs det ofta att man har en bra sökfunktion för att kunna "hitta rätt(a) post(er)".

Vilken nytta har användaren att 1000-tals poster returneras egentligen?

cya,
/PatrikB

Permalänk: https://www.webforum.nu/p/973475

---

Tråden på webben: https://www.webforum.nu/amne/asp/70374-optimera-kod
