Postoji nekoliko razloga za upotrebu Dataset-a:
1. Disconected operations koje ti je zevs85 naveo, s tim sto naravno i List<T> moze da se napravi da podrzava to ali uz dodatni kod.
2. Jednostavnija upotreba (GUI dizajn), sto ajd da kazemo nije presudno
3. Omogucava multi-object strukturu sto ne mozes direktno postici sa List<T> (Dictionary<string, List<T>> ?

)
4. Omogucava uspostavljanje i odrzavanje relacionog modela izmedju objekata
5. Omogucava uspostavljanje validacije i default vrednosti
6. Omogucava serijalizaciju kompletne strukture zajedno sa semom, ukljucujuci i relacije (nested ili linked po zelji)
7. Omogucava merge dve liste objekata
Nista od ovoga nije nemoguce izvesti manuelnim kodiranjem tih funkcionalnosti ali ako implementiras sve to u T, List<T> i Dictionary<string, List<T>> onda si u osnovi dobio typed DataRow, DataTable i DataSet objekte
Ta prica za performanse je malo naduvana i najvise potice u stvari od netipiziranih datasetova. Kad pogledas operacije ucitavanja strukture i pristupa podacima imas ove korake:
1. Ucitavanje podataka u native sql strukturu, apsolutno identicno za sve, dal si radio preko DAABa ili je DataAdapter pozvao sqlcommand u osnovi je identicno, dobija se niz sqlDataRow
2. Schema discovery O(1): ovde je netipizirani dataset najveci trosadzija, mora da izanalizira strukturu koju ucitava (ispipavanjem columns prvog elementa ucitanog niza iz 1.) i da na osnovu toga dinamicki generise DataTable i njegov Columns. Tipizirani DataSet ovo nema kao sto nema ni List<T>
3. Generisanje instanci O(n): Ovde zapravo List<T> postize prvi gain. Ti direktno generises instancu T objekta dok tipizirani i netipizirani dataset moraju da koriste mapping tabelu. Ovde je realno (bar po meni) doslo do propusta u ado.net timu, ne postoji ni jedan valjani razlog da se tipizirani DataAdapter oslanja na netipizirani Fill, sve informacije su vec prisutne design time i generisani kod moze komotno da napravi Fill override gde je instanciranje identicno kao za List<T>, al ajde.
4. Ubacivanje instanci u listu O(n) + merge O(n^2): ova operacija/e je skupa u Datasetu ali sa razlogom, ovo je trenutak u kom se proverava i kontrolise relacioni model i dataset nece dozvoliti da se doda instanca koja krsi model. List<T>.add je brzi samo i iskljucivo iz razloga sto nema relacioni model koji treba da ispostuje. Ovde bar nisu toliko zakazali sa performansama jer se sve relacije definisu column objektima umesto imenima polja sto smanjuje penalty koji izaziva citanje netipiziranih datasetova.
Na tu temu, u datasetu pristupanje redu i polju se obavlja kroz instancu DataRow obekta i ovde se desava onaj veliki pad performansi kojim se plase ljudi

, svaki pristup bilo kom polju netipiziranog DataRow objekta je pretrazivanje columns strukture po stringu i onda lociranje celije po indeksu pronadjene kolone, ako se ne varam ovo je samo po sebi O(n^2) operacija zbog poredjenja stringova, pa se to onda dodatno komplikuje operacijom koju hoces da uradis. Tipizirani dataset nema tih problema jer su sva polja implementirana kao properties nasledjene klase pa je "trosak" pristupa isti kao za T.
Zakljucak, nemoj koristiti netipizirane DataSetove

ako ti je performansa problem, ako ti treba nesto sa pocetne liste funkcionalnosti daj sebi oduska i koristi tipizirani dataset jer ces implementacijom tih funckionalnosti ionako izgubiti prednost koju ti daje List<T>. Ako ti ne treba nista od toga onda koristi List<T> ili jos bolje predji na Linq2Sql, DAAB je tu vise istorijska gradja ne verujem da to iko vise odrzava od kad je izasao Linq2Sql (btw, Linq2Objects funkcionise odlicno i nad datasetom za offline operacije ako ti trebaju, isto kao i za List<T>)
Realno ako pises program za dobrilu koja ce da ucita par redova to da mulja deset minuta i onda da uradi update tebi performanse nisu problem, sigurno imas neke poslovne procese i pravila u kojima bi ti dataset operacije pomogle i ti se sad vijas oko toga tako sto manuelno implementiras te operacija kao operacije nad List<T>. Sa tvog stanovista to je odlicno jer pravdas svoje radno mesto boljim performansama (sto je opet diskutabilno jer te operacije koje dodas kostaju kao i operacije dataseta), ali sa poslovne tacke gledista znaci da produzavas vreme razvoja aplikacije bez opipljivih ili bolje receno dovoljno znacajnih dobitaka u aplikaciji.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić