Soci (Soczó Zsolt) szakmai blogja

2015.12.22.

.NET fejtörő

Filed under: .NET,Szakmai élet — Soczó Zsolt @ 15:29

Élő kódból. Az első megoldás jól működik, a második nem, mi lehet az oka? A hibajelenség, hogy az első beállítja a TickerId-t az objektumon belül, a második nem.

Parallel.For(0, tickOhlcs.Count, i => tickOhlcs[i].SetTickerId(key.TickerId));

Parallel.ForEach(tickOhlcs, tickOhlc => tickOhlc.SetTickerId(key.TickerId));

4 Comments

  1. A második IEnumerable-t vár. Esetleg hibás az IEnumerable vagy IEnumerator implementációja? Pl. a MoveNext már első kérdésre azt mondja, hogy nincs tovább.

    Comment by kpocza — 2015.12.22. @ 23:00

  2. Valójában hibás a kérdés, ha a bemeneti kollekció tömb, akkor jól működik a for, ha List, akkor a for sem.
    A kulcs az, hogy a kollekció structokat tartalmaz, nem classokat.

    Comment by Soczó Zsolt — 2015.12.22. @ 23:04

  3. Aham. Tehát a List indexere másol (visszetér az i. elemmmel a backing arrayből), ezért “elromlik” a For, a Foreach esetében meg persze, hogy másol, akármi van. Ellenben az array esetében a startOfArray+index*sizeof(structtype) memóriacímen található structon dolgozik és nem másol.

    Comment by kpocza — 2015.12.23. @ 01:29

  4. Igen, ez az ok, a struktúra másolódik vagy boxolódik (nem néztem meg mélyebben), így a másolaton fut let a setter.

    Mindig mondom tanfolyamokon, hogy a strukúrák elég speciális állatfajok, okkal kell csak bevetni őket.

    Comment by Soczó Zsolt — 2015.12.23. @ 14:06

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress