Autor | Zpráva | ||
---|---|---|---|
__martin Profil * |
#1 · Zasláno: 15. 7. 2010, 23:45:24
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 |
#2 · Zasláno: 15. 7. 2010, 23:49:31
__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 |
#3 · Zasláno: 15. 7. 2010, 23:58:43
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 * |
#4 · Zasláno: 16. 7. 2010, 00:51:29
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 |
#5 · Zasláno: 16. 7. 2010, 03:10:45
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.
|
||
Časová prodleva: 14 let
|
0