Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Optimera kod

Postades av 2004-05-23 13:17:03 - Benni Svensson, i forum c# (c-sharp), Tråden har 7 Kommentarer och lästs av 999 personer

Jag upplever att denna kod ta "lång tid" att köra.
Databasen är Access, går det att göra denna snabbare/effektivare?
<codecharp>
if(comboBox1.SelectedIndex >0)
{
string sCountry = comboBox1.Text;
string fullName = Regex.Split(sCountry , "([_]+)")[2];
string shortName = sCountry.Substring(0,2).ToLower();
string Constring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = "+"\"" + dataString + "\"" +"";
Form2.ActiveForm.Refresh();
string sql = "SELECT t_pageSidor.PageID, t_pageSidor.LangID, t_pageSidor.TextId, t_pageSidor.PageText, t_lang.shortLang " +
"FROM t_lang INNER JOIN t_pageSidor ON t_lang.lang_id = t_pageSidor.LangID " +
"WHERE t_pageSidor.PageID=" + iNyttsidNr +" AND t_pageSidor.TextId= " + iNyttMultiNr + " AND t_lang.shortLang = '" + shortName + "'";
con = new OleDbConnection(Constring);
da = new OleDbDataAdapter(sql,con);
ds = new DataSet("fromNTranslate");
con.Close();
con.Open();
da.Fill(ds,"fromNTranslate");
con.Close();
int a = 3;
richTextBox2.Text=(ds.Tables["fromNTranslate"].Rows[0][a].ToString());
nytt=false;

}
</code>
Vad som händer är att formen inte ritas ut medans "datorn tänker".


Svara

Sv: Optimera kod

Postades av 2004-05-23 13:36:32 - Andreas Håkansson

Benni,

Nu börjar vi vandra in på lite svårare saker. Problemet är att du använder en enkeltrådad applikation vilket gör att när du kör kod som tar långtid så kan inte någon annan del av ditt program svar, och det är därför som ditt gränssnitt "dör" under tiden arbetet genomförs.

Lösningen på detta är att använda ytterligare en tråd för att köra arbetet i bakgrunden och på så sätt ge din huvudtråd (där ditt gränssnitt finns) möjlighet att vara levande undertide som arbetet körs. Det är inte helt enkelt att bli vän med trådning vid första ögonkast och det finns ett par olika sätt (skapa egen tråd, använda ThreadPool klassen etc) att lösa det.

Principen är, skapa en ny tråd, exekvera koden som tar lång tid i den, när den är klar så signalerar den resultatet till din huvudtråd. Om du vill signalera <b>events</b> mellan trådar så bör du läsa http://www.pellesoft.se/communicate/forum/view.aspx?msgid=118602&forumid=44&sum=0 där .Patrik behandlar ett "allvarligt" problem när man fösöker uppdatera ett gränssnitt från en annan tråd (kort: det är aldrig bra) samt presenterar en fungerande lösning med nerladdningsbar kod.

Ta en titt på <b>Thread</b> och <b>ThreadPool</b> klasserna samt läs på lite hur <b>Asynchrounous IO</b> fungerar.

Ditt problem är inget ovanligt, men det kräver lite studier för att du skall kunna lösa det. Trädning medför stort ansvar (diciplin) på dig som programmerare, speciellt om man skall använda resurser som delas mellan trådarna (men det borde inte du behöva).

//Andreas


Svara

Sv: Optimera kod

Postades av 2004-05-23 16:09:28 - Benni Svensson

Hej Andreas, och tack för svaret.
Jag tror att det är lite över min klass.

Möjligen att jag kommer tillbaka till denna tråden senare, jag bör nog ta en titt på allt det andra först.


Svara

Sv: Optimera kod

Postades av 2004-05-23 18:08:19 - Oskar Johansson

Om du inte använder ditt dataset mer i koden så är den inte särskilt effektiv. För det första bör du se till att bara välja första posten i din sql-sats (om du nu inte redan gjort det, svarar på fel inläägg för att se det ;D ) Dessutom känns ett dataset lyxigt; använd en DataReader. Ex:

//command är ditt command-objekt
System.Data.IDataReader dr;
dr = command.ExecuteReader(); //Retunerar en IDataReader,
//det är bra om du inte
//binder dig till OleDbDataReader eftersom att det då blir svårare
//att byta datakälla.
if(dr.Read()) //Säkerhet, kollar så att du retunerar något.
{
min_variabel = dr.GetString(0) //GetByte/GetInt32/GetBoolean etc.
}
else
{
//inget retunerat!
}
//stäng allt etc.

Den där koden retunerar den första raden (.Read()) och den första kolumnen (.GetString()) som antas vara en sträng.


Svara

Sv: Optimera kod

Postades av 2004-05-23 22:37:54 - Per Karlsson

Testa att ändra sql-satsen till följande:
<CODE>
string sql = "SELECT iv2.PageID, iv2.LangID, iv2.TextId, iv2.PageText, iv1.shortLang FROM (SELECT shortLang, lang_id FROM t_lang WHERE shortLang = '" + shortName + "') iv1, (SELECT PageID, LangID, TextId, PageText FROM t_pageSidor WHERE PageID = " + iNyttsidNr + " AND TextId = " + iNyttMultiNr + ") iv2 WHERE iv1.lang_id = iv2.LangId";
</CODE>

Detta kan gå snabbare, men detta beror mycket på hurpass duktig databasmotorns optimerare är. Det är iallafall i sql server ofta möjligt att snabba upp vissa frågor med hjälp av inline views.

Lycka till!
/PK


Svara

Sv: Optimera kod

Postades av 2004-05-24 00:18:39 - Benni Svensson

pelka:
Menar du att jag skall ersätta mina tabelnamn med "iv1.PageID och iv2.PageID"?


Onkelberg
Jag förstår inte hur jag skall koppla
dr = command.ExecuteReader(); ?

För det är väll inte så att det kopplad likadant som adaptern?


Svara

Sv: Optimera kod

Postades av 2004-05-24 00:26:17 - Oskar Johansson

Oj, missade att det var en dataadapter du använde. Du får byta din dataadapter mot en Command-class istället. Dås ak det där fungera


Svara

Sv: Optimera kod

Postades av 2004-05-24 11:14:27 - Benni Svensson

Onkelberg.
När jag kör så här:
<codesharp>
OleDbCommand Command = new OleDbCommand(sql,con);
System.Data.IDataReader dr;

con.Open();
dr = Command.ExecuteReader();
// if(dr.Read())
// {
while (dr.Read() )
{
richTextBox2.Text = dr.GetString (3);
}
// }
con.Close();
dr.Close();
</code>
...då fungerar allting helt suveränt, blir också avsevärt snabbare.
Men im jag lägger in din föreslagna if-sats, då läser den ingenting.

Mysko...


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 155
27 952
271 704
11 766
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies