Þær gagnagrindur sem auðveldast er að breyta til að bæta afköst eru söfn, sem skiptast í sett, lista eða fylki, og hakkatöflur (maps, vantar íslensku, minnir að ég hafi heyrt hakkatöflur einu sinni).
Þar sem þessi söfn eru mikið notuð og fást oft við mikinn fjölda gilda í einu er mikilvægt að velja hentugastu tegund safna sem í boði er. Sumar útfærslur safna eru byggðar til að höndla röðun gilda og það dregur úr hraða. Þegar röðun skiptir ekki máli, þá er betra að nota algjörlega óraðaða útfærslu í staðin.
Í Java þarf að huga að því hvaða hlutir eru synchronized (íslenska? Samstilltir?) eða ekki, yfirleitt þurfa hlutir ekki að vera það, en það er efni í aðra grein. Þumalputtaregla um synchronization í Java, notið ArrayList og HashMap frekar en Vector í fjölþráðaumhverfi þegar ekki þarf að huga sérstaklega að samstillingu.
Einföld fylki eru hröðustu gagnagrindurnar þar sem hægt er að nota þær. String[] er besta leiðin til að geyma strengi, hraðvirkara en listar eins og ArrayList, sem betur eru fallnir til að geyma flóknari hluti. Reynið að nota grindur sem til eru í libraryum þegar þið getið, þær grindur er búið að besta og eyða meiri vinnu í en venjulegur forritari getur sett í sína sérsmíði, og að auki er kóðinn þar stöðugur.
Öflugasta leiðin til að auka afköst í gagnagrindum er að huga að stærðum safnanna og stilla þær í rétt.
- Vill gleymast því flest eru söfnin dynamísk, kóðinn þýðist og keyrist, en er ekki vel skrifaður.
- Vörumst að hakkatöflur stækki umfram það sem hún getur tekið, leiðir til margfaldra hnúta.
- Stærri hakkakóði tryggir betri dreifni gagna í hakkatöflum og bætir afköst.
- Upphafsstillum lista af kostgæfni, forðumst að listinn þurfi að stækka.
- Stillum hversu mikið listi á að stækka í einu ef það er hægt.
- Að bæta við og taka af endum lista eykur afköst, komumst hjá hliðrunum innan listans.
Upphafsstillingar á söfnum er hlutur sem þarf að venja sig á gera.
Svo ég nefni eitt dæmi, þegar dælt er úr ResultSettum gagnagrunna inn í fylki er ekkert einfaldara en að búa til fylki jafnstórt ResultSettinu;
- new ArrayList(ResultSet.getFetchSize()))
Allt of oft rekst ég á að þetta er ekki gert, einfaldasti hlutur í heimi
Ef sóttar voru allar 300.000+ færslurnar í þjóðskránni er ekki góðs viti að listi hafi verið upphafsstilltur á 100 færslur og bæti við 10 þegar stækka þarf listann.
Einfaldir hluti skipta líka máli :o
massi