Kezdőoldal » Számítástechnika » Programozás » Van különbség a két feltétel...

2105as kérdése:

Van különbség a két feltétel megadás között? For- ciklus meddig fut. (c#)

Figyelt kérdés

(Az esetleges elírásért bocs, jegyzettömben írtam )


c#


{

Console.Write("Kérem add meg a tömb elem számát : ");

int szam = convert.Toint32 (Console.ReadLine());

int [] tomb = new int [szam]


for (int i = 0; i < szam VAGY tomb.Lenght ;i++)

{


}


}

Most addig fut még i< szam VAGY másképp i<tomb.Lenght

ez a kettő között van valami eltérés ??


2017. febr. 16. 20:42
1 2
 1/14 anonim ***** válasza:

Én is még csak most ismerkedek a programozással, de szerintem semmi különbség nincs a kettő közőtt, mivel a tömböd hossza a szam nevű változótól függ.

Amúgy ilyenkor ha tesztelsz akkor ki fog jönni, hogy van-e különbség. Futtasd le 3 különböző számmal és a ciklusban irasd ki mondjuk az i-t. Akkor látni fogod, hogy hányszor ment le a ciklus ;)

2017. febr. 16. 21:02
Hasznos számodra ez a válasz?
 2/14 anonim ***** válasza:
28%
Mind a kettő ugyanaddig fut és ugyanaz lesz a működése, de a tomb.Length változat a fordító optimalizálásának sajátossági miatt nagyságrendekkel gyorsabb lesz.
2017. febr. 16. 21:14
Hasznos számodra ez a válasz?
 3/14 anonim ***** válasza:

A for ciklust nem érdekli hogy honnan jön a feltétel, egy egyszerű intet vár. Arra viszont nem vennék mérget, hogy a tomb.Lenght gyorsabb, vagy pontosan ugyanannyi idő alatt fut le, vagy sokkal-sokkal lassabb(attól függően, hogy hogy tudja meg hogy hány elemű az tömb, ha végigiterál mindegyik elemen(listáknál ez a helyzet, tömbnél nem tudom) akkor jelentősen lassabb).


Más nyelveknél is érdemes a legtöbb esetben egy ideiglenes változóba kimenteni a végigiterálandó kollekció méretét, nyilván ilyen 5-10-100 elemnél nincs túl nagy jelentősége, de pár ezernél már meglátszik, felette meg pláne.

2017. febr. 17. 02:01
Hasznos számodra ez a válasz?
 4/14 Camorri ***** válasza:

Hello,

Szemely szerint en mindig a tomb.Length-et hasznalom.

Nem feltetlen azert mert, gyorsabb vagy ilyenek, hanem mert igy öndokumental a kodom. Plussz a szam-ot igy felhasznalhatod barmi masra, ha szükseged van ra. Tovabba kesobb nem is nagyon fogod tudni elmenteni hogy milyen hosszu egy tomb, mert az fölös memoria, helyette CSAK a tomb.length() fog menni.


(Nemetorszag - javaEE webfejlesztö vagyok)

2017. febr. 17. 08:58
Hasznos számodra ez a válasz?
 5/14 anonim ***** válasza:

#4

Dehogy fölös memória, ahogy nincs rá hivatkozás felszabadul(illetve ha már elég szemét összegyűlt), ugye ez az előnye a c# nak pl c++ hoz képest - na meg azért ne viccelődjünk kérem, nem 256kb memóriával kell gazdálkodni, bőven elférne egy felesleges int, ma már egy alsó kategóriás telefonba is annyi ramot raknak mint amennyi 10 éve ment egy gamer gépbe, ha kifutsz a memóriából akkor az nem emiatt lesz.

2017. febr. 17. 09:29
Hasznos számodra ez a válasz?
 6/14 anonim ***** válasza:

"felszabadul(illetve ha már elég szemét összegyűlt), ugye ez az előnye a c# nak pl c++ hoz képest"


Ez inkább hátrány a RAII -val szemben.

2017. febr. 17. 12:28
Hasznos számodra ez a válasz?
 7/14 Camorri ***** válasza:

Persze nem az pár bitnyi kicsi int fogja meghatározni a memóriát, meg persze mindenben már GB-nyi memóriák vannak.


Csakhogy manapság rá kell nézni a programokra és el lehet nyugodtan hánynia az embernek magát. Annyi fölös memóriát foglalunk le hogy az már szemtelenség. És ehhez könnyű hozzászokni, és a végén már azt lesed, hogy hopp kifutottam a keretből. Egyáltalán nem egy int ről van szó. De azért mégis érdemes hozzászokni a memória kezeléshez.

2017. febr. 17. 13:16
Hasznos számodra ez a válasz?
 8/14 SimkoL ***** válasza:

Sajnos a mai programnyelvek, programok, programozók pazarlóan bánnak az erőforrásokkal, feltételezve hogy mindenki 'modern' gépet használ. A gyakorlatban ez nincs így, láttam pár jó nagy céget ahol ezeréves masinák vannak.

Én magam egy P4 HT, 3 GHz, 3 GB Ram programozok - ez a legrosszabb gép otthon, az asszony ezerszer jobb gépen játszik - de ami ezen elfut normálisan az csak jobb lehet más gépen.

Off:

Nem vagyok tanult programozó és nem is programozóként dolgoztam, de nem egyszer előfordult a CÉG-emnél, hogy a programozók hozzám küldték az embereket, hogy ők XT-re :) nem írnak programot. Nincs ezzel semmi gond, ha tisztában vagy az erőforrásokkal és jól állítod be fordítót. Nem kevés plusz pénzt kerestem vele :)

2017. febr. 17. 13:54
Hasznos számodra ez a válasz?
 9/14 anonim ***** válasza:
Hát persze, ez elméletben nagyon szépen hangzik, a gyakorlat viszont úgy működik, hogy a fejlesztésre szánt idő véges, nem lehet mindent kijavítani, mindent optimalizálni, sorrendet kell állítani. Az sajnos nem érv, hogy a 20 éves gépen ez gondot okozhat, aki 20 éves géppel rendelkezik az egyetlen szoftverfejlesztőnek sem célközönség, ha nem hajlandó 30 ezerért venni egy használt gépet aminek már meg sem kottyannak az esetleges kényelmes megoldások akkor nyilvánvalóan nem fogja megvenni azt sem amit épp hegesztek, miért kéne az ő igényeihez igazodnom? Abból nem tudok kenyeret venni hogy boldogan letorrentezi a cuccomat. Ha olvashatóbb kódhoz vezet a minimális plusz memória foglalás akkor bőven megéri, mert nem azzal kell szarakodnom 3 hónap múlva hogy rájöjjek hogy mit csinál az adott kódrész(általánosságban beszélek, a kérdező példájánál teljesen irreleváns, egyrészt mert a GC összeszedi, másrészt meg mert egy int nyi memóriát "pazarlunk", ezzel viszont jó eséllyel megspórolunk egy rakás számítást(ha végig kell iterálni a tömbön, mint írtam nem tudom, hogy tömbnél hogy megy, de felteszem itt sem variáltak)).
2017. febr. 17. 14:28
Hasznos számodra ez a válasz?
 10/14 anonim ***** válasza:

A #2-est nem tudom mért pontoztátok le, ő írta le a tutit.

Aki nem hiszi próbálja ki. A .NET JIT compilere nem fog index checkeket végezni, ha a teljes tömbön mész végig (for (i=0;i<tomb.Length; i++)), mert tudja, hogy ebben az esetben felesleges, úgysem lesz exception. Ezért gyorsabb, ha így van írva. Ha külön változóban van a méret az ember látja, de a compilernek már nem egyértelmű, hogy ez ugyanaz, így kénytelen lefuttatni az index ellenőrzéseket.

Persze a különbség nem releváns. 200 millió(!) elemre ha int[]-ről van szó és csak összeadod a számokat, akkor 430ms vs 450ms az eredmény a tomb.Length javára az én gépemen. (átlagosan)


Persze ha ez nem csak egy tomb.Length property lenne, hanem vmi

for (int i=0; i<myenumerable.CaculateItemCountVerySlow(); i++) akkor céleszerű kitettni külön változóba.

2017. febr. 17. 15:44
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!