És miért?
[source:C#]
Stopwatch st = Stopwatch.StartNew();
char a = ‘1’;
char b = ‘a’;
for (int i = 0; i < 1000 * 1000 * 10; i++)
{
//string s1 = new string(new char[] { a, b });
//string s2 = a.ToString() + b.ToString();
}
st.Stop();
Console.WriteLine(st.Elapsed);
[/source]
Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.
LEAVE A COMMENT
3 COMMENTS
Talán azért gyorsabb, mert kevesebb objektum létrehozás kell a tömbös verzióhoz?
1 eset: 2 objektum (char[], string)
2 eset: 3 ojjektum (string, string, string)
Illetve a concat függvénynél hatékonyabb lehet a konstruktor (a Reflectorral nem kinyerhető a forrása).
Szerintem is az első gyorsabb.
Az első esetben létre kell hozni egy 2 elemű tömböt (newarr IL utasítással), majd ezt a két elemet feltölteni (local stack műveletek). Mindenre van egyszerű IL utasítás. Ezután egy string(char[]) konstruktort kell hívni, ami natív kód, tehát valószínűleg hatékony.
A második esetben mindkét char-on meg kell hívni a ToString-et. A reflector szerint ez bizony egy new string(c, 1) konstruktorhívással végződik (szintén nincs reflectorral elérhető forrás, ez még hatékony).
Majd pedig létre kell hozni a két string konkatenációja miatt egy újabb string példány a string Concat műveletében A Concat művelet a Reflector szerint eléggé bonyolul:
– Csomó feltétel
– Mindenféle függvényhívás
– 2-szer rá kell jönnie a 6. feltétel (while is feltétel) kiértékelése után, hogy 1 character hosszú string-et hogyan kell átmásolni.
A string bizony egy immutable típus, ami azt jelenti, hogy amilyen értéket egy példány legelőször felvett, az marad továbbra is az értéke. Pl. ha egy a+=b; műveletet végzünk két stringgel, akkor lesz egy olyan “elveszett” ‘a’ példányunk a memóriában, amiről a gc fog gondoskodni. Tehát a második esetben még optimalizálni sem tudna az a.ToString() példány s2-ként való újrahasznosításával.
Szervusz!
Nem tudom kérhetek-e segítséget. Telepitenem kéne a Visual C++ 2005 Redistributable programot, de install kezdete után command line opcion syntax error /? hibaüzenetet kapok és a telepités megszakad. Nem használnám a programot csak a Nokia update program szeretné használni.
Már mindenhol keresgéltem, de megoldást nem találtam.
Win xp sp2 az alap. Ha tudsz segiteni köszönön. Péter