Naja - entweder SQL Server Verbindung verbessern - oder Daten Cachen!

Mehr fällt mir dazu pauschal net ein! Haste mal mit dem Query Analyzer auf die 
Datenbank zugegriffen - und mal kontrolliert - wie schnell da die Zugriffe sind?

-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Im Auftrag von Stadelmann 
Patrick
Gesendet: Montag, 21. März 2005 09:41
An: csharp.net@glengamoi.com
Betreff: [CSharp.net] Seite sehr langsam

Hallo,
Ich habe eine .aspx Seite, in der ich in Page_Load eine
Funktion aufrufe, die mir einen HTML String zurück gibt.
Jetzt hab ich das Problem, das diese Seite bis zu 3 Sekunden
braucht um sich aufzubauen.
Der zurückgegebene HTML String sieht Beispielsweise so aus:

<table align="center" border="0" cellpadding="1" cellspacing="0">
<tr><td align="center"><a target="_top" class="subMenu"
onmouseover="JavaScript:....;" href="JavaScript:.....;">Test 1</a></td></tr>
<tr><td align="center"><a target="_top" class="subMenu"
onmouseover="JavaScript:....;" href="JavaScript:.....;">Test 2</a></td></tr>
<tr><td align="center"><a target="_top" class="subMenu"
onmouseover="JavaScript:....;" href="JavaScript:.....;">Test 3</a></td></tr>
<tr><td align="center"><a target="_top" class="subMenu"
onmouseover="JavaScript:....;" href="JavaScript:.....;">Test 4</a></td></tr>
<tr><td align="center"><a target="_top" class="subMenu"
onmouseover="JavaScript:....;" href="JavaScript:.....;">Test 5</a></td></tr>
<tr><td align="center"><a target="_top" class="subMenu"
onmouseover="JavaScript:....;" href="JavaScript:.....;">Test 6</a></td></tr>
</table>

Diesen String setze ich in die Seite mit Hilfe eines
<span> Tags, indem ich spanID.InnerHtml = HTMLString ausführe.

Jetzt hab ich mit Trace einzelne Stellen im Script gemessen und
die höchsten Zeiten in der gesamten Funktion hat das erstellen
der sqlReaders.

Dabei benötige ich für einen sqlReader 0,385337 Sekunden und wenn ich den
sqlReader jetzt
im ganzen Script bis zu 3 mal mit neuen Daten füllen muss, dan bin ich schon
bei gut 1 Sekunde nur um die sqlReader zu generieren.
Diese Zeit erhalte ich jedoch nur, wenn ich dazu noch ein einfaches Select *
>From Tabelle
ausführe. Sobald ein komplexeres SQL Statement und das ganze drum herum dazu
kommt,
erhöht sich die Zeit fast um das doppelte.

Hier der Source für die 0,385337 Sekunden:

//##################################################################
Trace.Warn("aspxSeite","Begin sqlReader erzeugen");

System.Data.SqlClient.SqlParameter[] parms = new
System.Data.SqlClient.SqlParameter[0];
using(System.Data.SqlClient.SqlDataReader sqlReaderTest =
db.ExecuteReader(System.Data.CommandType.Text,"SELECT Tabelle.ID FROM
Tabelle WHERE ID = 1",parms))
{if(sqlReaderTest.Read()){}}

Trace.Warn("aspxSeite","End sqlReader erzeugen");
//##################################################################

//##################################################################
//Funktion zum erstellen des SQL Readers
public static SqlDataReader ExecuteReader(CommandType cmdType, string
cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
System.Data.SqlClient.SqlConnection conn = new
System.Data.SqlClient.SqlConnection(html.connection.strConnection);
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
conn.Close();
throw;
}
}
//##################################################################

//##################################################################
//Funktion zum zuweisen der Parameter
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn,
SqlTransaction trans, CommandType cmdType, string cmdText, params
SqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
//##################################################################

Wenn ich bei diesen Funktionen gemessen hab, sind die höchsten Zeiten
in der
public static SqlDataReader ExecuteReader(....
Funktion bei der Zeile
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

Das kann doch nicht sein, das das erstellen eines sqlReaders so extrem hohe
Zeiten
in Anspruch nimmt. Sonst ist dies doch auch nicht der Fall?

Währe sehr dankbar wenn jemand vielleicht eine Lösung hätte bzw. schnellere
Alternativen.

gruß
Patrick



_______________________________________________
CSharp.net Mailingliste, Postings senden an:
CSharp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/csharp.net

_______________________________________________
CSharp.net Mailingliste, Postings senden an:
CSharp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/csharp.net

Antwort per Email an