Avatar billede simon.ulsnes Nybegynder
14. september 2002 - 00:45 Der er 4 kommentarer og
3 løsninger

Casting eller ToString()?

Hej eksperter,
Jeg ville bare høre hvad der er mest effektivt performancemæssigt, casting eller ToString()?

int i = 123;
// Casting:
string str = (string)i;
// ToString():
str = i.ToString();

Begge steder bliver str = "123" så effekten er den samme, men hvad er hurtigst?

// Simon
Avatar billede kichian Nybegynder
14. september 2002 - 10:55 #1
Umiddelbart vil jeg tro at .ToString() er hurtigst, i det der ved casting først undersøges om objektet har det ønskede interface. Hvilket må antages at være langsommere end at slå op efter en funktion.

Derudover synes jeg også at casting for at få streng-repræsentationen er en dårlig løsning, idet det antyder at int er en specialisering af string. Det eneste de har til fælles er at de begge er objekter.
Avatar billede simon.ulsnes Nybegynder
14. september 2002 - 11:02 #2
Ok, jeg vil lige høre nogle flere meninger før der kommer point...
Avatar billede lemon Nybegynder
14. september 2002 - 13:44 #3
Jeg ville tro at det er compileren der undersøger om objektet har det ønskede interface, hvilket derfor ikke gør casting langsommere når først koden er compilet. Hvis der er forskel må det være ganske få millisekunder... hvad med at undersøge det i praksis - lav 10.000 castings og 10.000 .ToString() og se hvad der er hurtigst... selvom caching nok vil gøre resultatet lidt usikkert...
Avatar billede z42cool Nybegynder
15. september 2002 - 12:33 #4
For det første vil jeg give Kichian ret i, at casting er en dårlig løsning da det antyder sammenhæng mellem Int32 typen og String typen hvilket der ikke er. For det andet vil jeg også mene at ToString er hurtigst. Int32 er en value type og hvis den skal castes skal den først boxes og boxing er relativt dyrt.
Avatar billede simon.ulsnes Nybegynder
22. september 2002 - 14:14 #5
OK, et rent praktisk lille spørgsmål, hvordan laver man boxing i C#?
Avatar billede z42cool Nybegynder
23. september 2002 - 09:33 #6
Boxing sker automatisk hvis systemet skal bruge en reference til en value type. Value types er (som du sikkert ved) allokeret på den lokale stack, hvorimod reference types er allokeret på heapen. Hvis det bliver nødvendigt at behandle en value type som en reference type, som f.eks. hvis man skal kalde en metode på den, så bliver der oprettet en instans på heapen og de korrekte data bliver kopieret og referencen er dermed skabt!
Avatar billede simon.ulsnes Nybegynder
23. september 2002 - 16:27 #7
OK, tak... :-)
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
Kurser inden for grundlæggende programmering

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