• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    TENCOKACISTROMYProgramovani v C#, F# a dalsich jazycich pro .NET, Mono a ostatni CLI implementace
    TOOMIX
    TOOMIX --- ---
    ARANIUS: nene, koukni na ten muj obrazek. Jsem to hned zkousel a ^1 vrati prvni od konce, takze posledni, je to jako v Pythonu, kdy se posledni prvek vrati pomoci indexu -1. Proste misto minusu je ^ a to je cely
    ARANIUS
    ARANIUS --- ---
    MORIARTY: Ak som ten článok cital korektne tak posledný prvok je ^0, ^1 by mal označovať predposledný prvok ;)
    MORIARTY
    MORIARTY --- ---
    Vtip je v tom, že poslední prvek není ^0, ale ^1? To je trochu nekonzistentní, když pak u pětiprvkového pole je poslední prvek pole[4], ale první je pole[^5] :)
    VITI
    VITI --- ---
    TOOMIX: CERMI_FOX: no ok ... osobne tyhle magicky zkratko zapisy moc nevyhledavam. No uvidime :-)
    TOOMIX
    TOOMIX --- ---
    VITI: usetris psani kodu. Mas treba dataset, v nem tabulku a chces posledni radek.
    Misto
    var r = dataset.mojetabulka.Rows[dataset.mojetabulka.Rows.Count - 1];

    Nove muzes pouzit
    var r = dataset.mojetabuka.Rows[^1]
    CERMI_FOX
    CERMI_FOX --- ---
    VITI: syntactic sugar - napsání více logiky za použití menšího množství kódu :)
    VITI
    VITI --- ---
    TOOMIX: BTW k cemu je to dobre?
    TOOMIX
    TOOMIX --- ---
    TEAPACK: no mínus ne, ale System.Index má i přetížený konstruktor, kde si boolem dáš, jestli je to od konce nebo od začátku
    
    //stejné jako ^1
    var index = new System.Index(1, true)

    But you can also create an Index with a new ^ operator, meaning "from end". So ^1 is one from the end
    TEAPACK
    TEAPACK --- ---
    TOOMIX: byl bych raději, kdyby tam bylo mínus, podobně jako u pythonu, protože takhle nemůžeš jednoduše skripty, které by používaly oba způsoby najednou... :-/
    TOOMIX
    TOOMIX --- ---
    Take C# 8.0 for a spin | .NET Blog
    https://blogs.msdn.microsoft.com/dotnet/2018/12/05/take-c-8-0-for-a-spin/

    Do more with patterns in C# 8.0 | .NET Blog
    https://blogs.msdn.microsoft.com/dotnet/2019/01/24/do-more-with-patterns-in-c-8-0/

    Už lze indexovat od konce pole/listu, aniž by se muselo použít aaa.Count-1 pro návrat posledního prvku. Dá se tam ^1 a je to

    RUTHAN
    RUTHAN --- ---
    Dik moc podivam se na to.
    SAJAGI
    SAJAGI --- ---
    RUTHAN: Pokud jsi ve stádiu, že tápeš, proč bys měl synchronizační mechanismy používat, tak doporučuju třeba https://msdn.microsoft.com/en-us/magazine/jj863136.aspx (včetně části 2). Nepropadni ale pak zoufalství - pokud neprogramuješ pro ARM, tak to není tak zlý :) Obecně ale nejjednodušší je nemít žádný sdílený stav mezi více vlákny. Pokud potřebuješ něco sdílet, tak můžeš používat třídy k tomu určené (třeba Interlocked, ConcurrentDictionary). No a pokud ani tohle nepomůže, tak je jsou tu synchronizační primitiva (lock, ReadWriteObjectLock(Slim), Monitor, apod). Reálně ti asi bude stačit jen ten lock.
    SUK
    SUK --- ---
    RUTHAN: Hele, ono to "neni slozity". Vzasade na to koukej tak, ze ti jedno muze menit hodnoty pod rukama (tzv. race condition), cemuz muze zabranit lock alias mutex, v C# na to je Monitor. Jen davej pozor na poradi a konkretni locky, aby nenastal deadlock. Toliko asi k paralelnimu programovani - dulezite keywordy k googleni jsou tucne. Mnoho uloh se da vyresit bez jakyhokoliv lockovani, mezivlaknove komunikace a tak. Jinak, ohledne toho Invoke, tak to spociva v tom, ze ty "reknes, co se ma udelat" tomu prvku, ktery si to vykona az bude cas ve svem vlakne. Tady na to hledej asi C# invoke delegate.
    RUTHAN
    RUTHAN --- ---
    SUK: Obecne ti rozumim a rozumim, ze je to robustnejsi, lepsi.. a ze by to tak melo byt, ale potreboval bych nejaky odkaz, odkud se toho naucit protoze, zatim nejaka prace s vlaknama jde mimo me.

    Jednoduchy priklady na webu chapu, ale pokud to ma aplikovat na svuj pripad, tak uz to nedavam, moc novych veci.. a veci nejaky lamba errory mi zatim nic nerikaj. Potreboval bych nejaky dobry uvod do problematiky.

    Jinak z tohohle clanku: https://docs.microsoft.com/...standard/parallel-programming/data-structures-for-parallel-programming , ze tyhle veci mely svuj vyvoj (ja jsem naivne cekal,ze je to dalo optimalne vyreseny).. a je mozny, ze to historicky C# 2010, ktery pouzivam neni to pravy, to samy nejaky stary navody. Jsem ho zvolil, protoze je to maly co se tyce instalace a neinstaluje se to dlouho. Co jsem se dival tak 2012 express je jeste docela rozumnej, pokud by to neco zlepsilo?

    Je mozny, ze na muj skill a patlani je to zatim moc, ale chtel jsem to zkusit..
    HALCYON
    HALCYON --- ---
    BRAP242: ODP.NET Core, ne? Ale jestli hledáš ORM, tak nevim.
    BRAP242
    BRAP242 --- ---
    jaka je momentalne nejdostupnejsi technologie, pokud chcete z .NET Core pristupovat do Oracle databaze? Pochopil jsem spravne, ze EF Core 2.0 > provider je ve vyvoji?
    SLUPKA
    SLUPKA --- ---
    SMOKY: Něco podobného se mi stalo myslím kdysi v .NET 3.5, když jsem měl něco takového:
    var x = new Foo(GetParam(z));

    Když GetParam(z) vyhodil výjimku, tak to při zavolání finalizeru padlo (jen při release konfiguraci a způsobovalo to pád v náhodné době). A chyba byla v tom finalizeru že this je null (bylo tam volání this.Dispose(false)).

    Jsou to pěkné chyby, které se strašně pěkně hledají :))
    GAPPEQ
    GAPPEQ --- ---
    Zdar, hledám programátora C++ pro spolupráci na vývoji audio pluginů. Ideálně framework JUCE. Budu rád za jakoukoliv pomoc při hledání, dobrejch lidí je málo...
    SUK
    SUK --- ---
    RUTHAN: Normalne nastavujes progressbar defakto taky spatne. Spravne bys mel vzdy predat praci do nejakyho threadu a zmeny v GUI delat jen pres component.Invoke. No a pocitat to muzes ruznymi zpusoby - nejjednodussi je asi mit pole cisel, pro kazdy thread jedno a pro aktualizaci progressbaru tyhle cisla jen secist.
    ICARUS
    ICARUS --- ---
    RUTHAN:

    1) Mit nekde bokem nejakou promennou, treba incrementCount, kterou ve smycce atomicky zinkrementujes a pomoci ni spocitas progres.

    2) Podivej se treba na StringBuilder nebo tak neco. Stringy jsou immutable, takze tim += operatorem pokazdy delas novy string, coz bude klast dost velky tlak na haldu. Proc ten lock nefunguje si nejsem jist - nejspis proto, ze se lockujes na nejakou instanci stringu AllLinesForWrite, kterou pak nahradis nejakou uplne jinou instanci, prave kvuli te immutability. Bud si tam nekde porid externi static object myLock = new object(), nebo muzes lockovat this, nebo treba ten pripadny StringBuilder. Popripade se muzes podivat na Producer/Consumer pattern.
    Kliknutím sem můžete změnit nastavení reklam