Autor Zpráva
__martin
Profil *
Ahoj, mám cyklus
            foreach (Material material in materialy)
            {
                for (int i = 0; i < material.pocetVyskytu; i++)
                {
                    castA += "  " + material.cislo + i.ToString("0000") + "  " + material.vlastnost1 + "      " + material.vlastnost2 + "\n";
                    castB += "  " + material.cislo + i.ToString("0000") + "      " + material.vlastnost1 + "\n";
                    castC += "  " + material.cislo + i.ToString("0000") + "      " + material.vlastnost2 + "\n";
                    castD += "  " + material.cislo + i.ToString("0000") + "      " + material.vlastnost3 + "\n";
                    castE += "  " + material.cislo + i.ToString("0000") + "      " + material.vlastnost4 n + "\n";
                    castF += "  " + material.cislo + i.ToString("0000") + "      " + material.vlastnost5 + "\n";
                    castG += "  " + material.cislo + i.ToString("0000") + "      " + material.vlastnost6 + "\n";
                }
            }


každý materiál má své číslo, vlastnosti a počet výskytů. Materiálů je zhruba 40 a počet výskytů v průměru 900. Počet částí textového souboru je A-G. Všechny části spojím a uložím do textového souboru.
40x900 = 36 000 řádků.
36 000 x 8 částí = 288 00 řádků v jedno souboru (cca 4,5MB).

Celý tento cyklus trvá 7 minut, dal by se nějak tento proces zrychlit? Děkuji.
Jan Tvrdík
Profil
__martin:
V C# umím hodně mizerně, ale z knihy si pamatuji, že existuje třída StringBuilder, která by snad měla být na tvorbu dlouhých řetězců optimalizovaná.
xmark
Profil
Odhadoval bych, že největší zdržení bude spočívat v práci s dlouhými stringy. Připojení cca deseti znaků k jednomu půlmegovému řetězci tisíckrát po sobě, to moc rychle nepůjde.
Skládal bych postupně proměnnou castAwrk a po každých třeba 100 průchodech ji přilepil na konec castA a vyčistil.
__martin
Profil *
Jan Tvrdík, xmark:
Díky moc! Zatím jsem zkusil "jen" StringBuilder a celý výpočet se zrychlil na 10 vteřin.
Hologos
Profil
Ono je to totiž tak, že v C# se při změně stringu ten starý smaže a v paměti se vytvoří nový + nový znak. Ukazoval nám to profesor na přednášce a snad u řetězce délky 1000 a více už to trvalo věčnost.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0