Gå til innhold

C#: hvordan sende en variabel mellom klasser kjappest?


Anbefalte innlegg

Mitt spørsmål er som følger:

 

Dersom man har 3 klasser (instansnavn), for eksempel:

Dataklasse (min_dataklasse)

Programklasse (min_programklasse)

Filskriverklasse (min_filklasse)

 

Dataklassen inneholder en float

Programklassen inneholder instanser av Programklassen og Dataklassen

Filskriver skal lagre dataklassens float.

 

 

er det da kjappes å

a)

 


i programklassen:
min_filklasse.Write(min_dataklasse.Data)

eller b)


i filklassen: 
public void SetData(Dataklassen d){
  min_dataklasse = d
}

public void Save(){
      Write(min_dataklasse.Data)
}

i programklassen:
min_filklasse.Setdata(min_dataklasse) //kjøres en gang i starten
min_filklasse.Save()//kjøres hver gang jeg vil lagre.

Forskjellen er at man i alternativ b har en ref til dataklassen og dermed ikke trenger sende data som variabler hver gang. I a sendes float verdien som et parameter. Hastighet er alt som teller her =)

 

vi snakker om en metode som skal kjøre i overkant av 200000 ganger/sec :dontgetit: (ikke skriving til fil, men det er ett enkelt eksempel)

 

beklager at eksempel "koden" er litt dårlig, håper det i allefall er forståelig :ermm:

Endret av nOne
Lenke til kommentar
Videoannonse
Annonse
  • 2 uker senere...

Tipper at .Net er smartere enn deg i dette tilfellet. Skriv det så enkelt og greit som mulig (slik det er ment), og .Net vil fikse resten for deg.

 

Om det ikke skulle være nok:

* Les dette (nøye): http://www2.sys-con.com/ITSG/virtualcd/Dot...omez/index.html

* Når du har implementert alle triksene i ovennevnte artikkel, så kan du begynne å bry deg om filleproblemet ditt. Det kan du f.eks. gjøre ved å bruke ildasm-programmet som følger med .Net SDK og sammenligne IL-koden som blir generert.

 

Når du er ferdig med å kaste vekk tiden din (slik jeg gjør nå), så kan du angre på at du ikke brukte den på å fikse bugs eller implementere nye features i programmet ditt.

Lenke til kommentar
Tipper at .Net er smartere enn deg i dette tilfellet. Skriv det så enkelt og greit som mulig (slik det er ment), og .Net vil fikse resten for deg.

 

Om det ikke skulle være nok:

* Les dette (nøye): http://www2.sys-con.com/ITSG/virtualcd/Dot...omez/index.html

* Når du har implementert alle triksene i ovennevnte artikkel, så kan du begynne å bry deg om filleproblemet ditt. Det kan du f.eks. gjøre ved å bruke ildasm-programmet som følger med .Net SDK og sammenligne IL-koden som blir generert.

 

Når du er ferdig med å kaste vekk tiden din (slik jeg gjør nå), så kan du angre på at du ikke brukte den på å fikse bugs eller implementere nye features i programmet ditt.

5941584[/snapback]

 

takk for link =)

 

når det gjelder om dette er en fillesak eller ikke er jo det en vurderingssak, og du kjenner ikke de nødvendige detaljene for hvor vesentlig dette er for det programmet jeg skriver =P

 

Tall verdier er for eksempel by value så dersom jeg gjør nok av slike spørringer må Garbage collector rydde mye kjafs om jeg sender det som parameter afaik. og i mitt program hadde jeg 50000 objekter som jeg testet mot 60 ganger i sekundet så nei det er ikke noe filleproblem....

Lenke til kommentar

Prøv med "ref" isteden:

 

i filklassen:

public void Save(ref float verdi)

{

// etc...

}

 

i programklassen:

min_filklasse.Save(ref minverdi);

 

 

Tror kanskje det er andre ting som heller burde optimaliseres, men det er vanskelig å se uten å se hele koden din. Eksempelet du hadde med skriving til fil er ganske dårlig siden å skrive til filen vil ta 99.99% av tiden uansett....

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...