Avatar billede c-sharp Nybegynder
10. august 2005 - 09:02 Der er 5 kommentarer og
1 løsning

Hvordan bør jeg bruge try/catch

Da det er resource krævende at have for meget til at stå i en "try" er jeg lidt i tvivl om hvordan jeg bør bruge "try/catch"

Jeg har følgende kode:

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("") + "\\Data\\test.xls;Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"");
               
try
{
    con.Open();
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT f3 FROM [POSTNR$] WHERE f1 = " + lande.SelectedValue.ToString() + " ORDER BY f3", con );
    DataSet dataSet = new DataSet();
    dataAdapter.Fill( dataSet, "Table" );

    byer.DataSource = dataSet.Tables["Table"].DefaultView;
    byer.DataTextField = dataSet.Tables[0].Columns[0].ToString();   
    byer.DataValueField = dataSet.Tables[0].Columns[0].ToString();   
    byer.DataBind();
    byer.Items.Insert(0, new ListItem("Zip Code","0"));

    con.Close();
    byer.Visible = true;
}
catch(Exception ex)
{
    con.Close();
                    Response.Write(ex.StackTrace);
}

Burde jeg i dette til fælde pille noget kode ud af min try block, og lave noget med en if-sætning hvis der er sket en fejl, eller har det ikke det helt store at side?
Avatar billede arne_v Ekspert
10. august 2005 - 09:07 #1
1)  det bør ikke koste noget at have mange linier inden i try catch

2)  det koster først når der sker en exception

3)  normalt er det pænest med bare en enkelt stor try catch fremfor 10 små - koden
    er mere letlæselig

4)  con.Close burde nok i en finally

5)  Exception er en meget generel exception at catche måske skulle du indsnævre
    det lidt
Avatar billede c-sharp Nybegynder
10. august 2005 - 09:41 #2
Jeg synes da at have lært at i Java skulle man ikke smide for meget i sin try block da denne kode køres på en mere resource krævende måde.

Hvis jeg smider con.Close() i finally, skal jeg så pille den ud af min try block?
Avatar billede carpediem Nybegynder
10. august 2005 - 09:49 #3
Ang. con.Close, så ja. Ting der er i finally bliver afviklet ligegyldigt om der bliver fanget en fejl eller ej.
altså:
con.Open
try
{
}
catch
{
}
finally
{
  con.Close()
}
Avatar billede arne_v Ekspert
10. august 2005 - 09:50 #4
nu nævner du selv Java ...

Java Performance Tuning / Jack Shiraz

chapter 6

"try catch blocks generally use no extra time if no exception is thrown"

og han har et eksempel som giver 0% for Java 1.3 og 1.4 (bogen er fra før 1.5)

[det koster 5-10% på Java 1.1 oh Java 1.2 men de er jo antikke]

----

ja - finally køres også ved success
Avatar billede c-sharp Nybegynder
10. august 2005 - 10:20 #5
Så er det der jeg har det fra, for jeg lærte java 1.2 :-)

Jeg takker endnu engang mange gange for hjælpen, arne_v smid et svar så er der point!
Avatar billede arne_v Ekspert
10. august 2005 - 10:25 #6
de 5-10% er i en løkke som ikke laver ret meget, så i praksis vil
overhead være mindre

men selv med 5-10% overhead ville jeg ikke splitte det op

200 linier kode som efter at der er lavet 40 try catch er blevet
til 400 linier kode er ulæseligt

og svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester