• ú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
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    JACHYMKO: ja se jim po svejch zkusenostech ani moc nedivim :).
    ale napsani si vlastniho UI frameworku bych u zakaznika bohuzel neobhajil, i kdyz by me to bavilo.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Jak byla ta pisnicka .... bylo tam "to vime, to zname" :D.
    Jo, taky jsem na to narazil. Na druhou stranu, je tam takovy stesti v nestesti - ty view jsou tak tlusty, ze si toho memoryleaku jde po chvili pouzivani, lze nevsimnout jen velmi tezko.

    Ja si prave udelal odvozenou tridu z UserControl a ta pri Unload ten DataContext vycisti.

    Fakt nechapu jak po sedmi letech, co to dali do releasu, se to muze chovat porad jeste takhle.
    NECROMAN
    NECROMAN --- ---
    Rada pro vsechny, kteri pisou UI v XAMLu a pouzivaji Triggery, Behaviors a podobne attached property, jejichz hodnoty nastavujete databindingem - zpusobuje to pekne memory leaky - opoustena stranka neni garbage collectnuta.
    Minimalne bych doporucoval pri opousteni stranky nastavovat DataContext, Content a Resources na null.

    Samotnou kapitolou je potom leakovani WebView/WebBrowser komponent a samotnych Image/ImageSource, a jak se nam take podarilo zjistit, tak i nativnich komponent jako LongListSelector/Pivot/Panorama ve WP8, pokud se jako ItemsSource pouzije bindovana kolekce.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Plus se neda pouzit na cokoliv, co ma navratovou hodnotu. Coz je logicky, protoze by se tim mohl zasadnim zpusobem narusit kompilovana sekvene prikazu.
    NECROMAN
    NECROMAN --- ---
    Zajimave zjisteni z dneska - [Conditional("DEBUG")] nelze pouzit na konstruktorech, destruktorech, operatorech a implicitnich implementaci interfacu.
    Stejne tak prazdny destruktor ve tride neni kompilatorem odstranen, ale je volan a udajne to snizuje vykon...
    SLUPKA
    SLUPKA --- ---
    Tak víc popiš o co jde, z toho co jsi napsal nejde moc nic poznat, takže ani určit, co bude nejlepší :))
    MAIMONIDES
    MAIMONIDES --- ---
    NECROMAN, SAJAGI: Ty dvojice přicházejí jako síťové požadavky, na které je nutný odeslat odpověď, chodí nahodile.
    SAJAGI
    SAJAGI --- ---
    MAIMONIDES: Nevím přesně kontext, ale pokud to chceš jednoduše, tak dvojitý for cyklus na vybrání dvojic a zpracování přes AsParallel()? Nebo to neparalelizovat vůbec, protože těch operací není až tolik.
    NECROMAN
    NECROMAN --- ---
    MAIMONIDES: nastudoval bych si toto - bud lze bud pouzit klasicke async Tasky a cekat na ne pomoci await Task.WhenAll(tasky)
    Nebo pouzit primo Dataflow library, ktera podporuje i celkem slozite scenare.
    Task Parallel Library (TPL)
    http://msdn.microsoft.com/en-us/library/dd460717.aspx
    MAIMONIDES
    MAIMONIDES --- ---
    Prosím poraďte. Mám soubor několika set instancí jedné třídy a hledám nejvhodnější způsob paralizace interakcí dvojic těchhle instancí. Může docházet i ke kolizím, ale interakce je celkem jednoduchá, pár desítek celočíselných operací.
    Jaký způsob paralelizace mám v c# použít. K dispozici je asi milion způsobů a nejsem si jistej kterej je na tenhle druh problému nejlepší.
    TOOMIX
    TOOMIX --- ---
    MORMEGIL: s těma rekurzema jsem to našel všude na netu, ale jak koukám na Tvoje řešení, tak je to fakt jednoduchý, a já se tu s tím seru půl dne. Díky moc ;)
    MORMEGIL
    MORMEGIL --- ---
    TOOMIX: Co to je za příšernou podivnou konstrukci?? K čemu se tam používá ten list (a proč si myslíš, že se tam někde něco filtruje podle typu controlu)? Proč se v cyklu a rekurzivní funkci furt dokola dělá cbJazyky.SelectedItem.ToString() == "English" a vyrábí se resource manager? Proč ne prostě něco jako (nástřel z první):
    private void ChangeLanguage(Control container, ComponentResourceManager resourceManager, CultureInfo culture)
    {
    	foreach (Control c in container.Controls)
    	{
    		if (c is Label || c is GroupBox || c is DevExpress.XtraTab.XtraTabPage || c is TextBox || c is System.Windows.Forms.ToolStripMenuItem)
    		{
    			resourceManager.ApplyResources(c, c.Name, culture);
    		}
    
    		if (c.Controls.Count > 0) ChangeLanguage(c, resourceManager, culture);
    	}
    }
    
    private void cbJazyky_SelectedIndexChanged(object sender, EventArgs e)
    {
    	var resourceManager = new ComponentResourceManager(typeof(HlavniOknoMobile));
    	CultureInfo culture;
    	switch(cbJazyky.SelectedItem.ToString())
    	{
    		case "English":
    			culture = new CultureInfo("en");
    			break;
    		case "Czech":
    			culture = new CultureInfo("cs-CZ");
    			break;
    		default:
    			throw new NotSupportedException();
    	}
    
    	ChangeLanguage(this, resourceManager, culture);
    }
    
    TOOMIX
    TOOMIX --- ---
    VIRTUALVOID: mám

    public HlavniOknoMobile()
            {
                Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("cs-CZ");
                InitializeComponent();
            }
    VIRTUALVOID
    VIRTUALVOID --- ---
    TOOMIX: nema sa nastavovat kultura pred InitializeComponent ?
    TOOMIX
    TOOMIX --- ---
    TENCOKACISTROMY: právě, že vůbec nic ;) Při startu aplikace se načte čeština
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("cs-CZ");

    a po přepnutí na angličtinu skrze combobox se to na 27 vteřin zasekne a pak je to anglicky
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    TOOMIX: A co jsi menil mezi tim, kdy to bylo do vteriny a kdy to zacalo trvat pul minuty?
    TOOMIX
    TOOMIX --- ---
    Zdravím, mám dotaz. Mám windows form, dva resource soubory (cz a eng) a potřebuju comboboxem přepnout jazyk za běhu programu. Tenhle kód fungoval, přepínal během vteřiny. Přijdu z oběda zkusím to, a změna trvá 27 vteřin, během kterých je aplikace zaseklá. Restart VS a PC nepomohl, takže bude zádrhel předpokládám jinde. Foreach projíždí cca 270 labelů, textboxů atd. Nějaký nápad, proč to najednou nejde?

            #region Zmena jazyka
    
            private List<Control> ChangeLanguage(Control container, List<Control> list)
            {     
                if (cbJazyky.SelectedItem.ToString() == "English")
                {
                    lang = "en";
                }
                if (cbJazyky.SelectedItem.ToString() == "Czech")
                {
                    lang = "cs-CZ";
                }
                foreach (Control c in container.Controls)
                {
                    //vycet typu Controls ke zmene jazyka
                    if (c is Label || c is GroupBox || c is DevExpress.XtraTab.XtraTabPage || c is TextBox || c is System.Windows.Forms.ToolStripMenuItem) list.Add(c);
    
                    if (c.Controls.Count > 0)
                        list = ChangeLanguage(c, list);
                    ComponentResourceManager resourcesComponents = new ComponentResourceManager(typeof(HlavniOknoMobile));
                    resourcesComponents.ApplyResources(c, c.Name, new CultureInfo(lang));
                }
                return list;
            }
            private List<Control> GetAllControls(Control container)
            {
                return ChangeLanguage(container, new List<Control>());
            }
            //zmena vyberu jazyka v comboboxu
            private void cbJazyky_SelectedIndexChanged(object sender, EventArgs e)
            {
                ChangeLanguage(this, new List<Control>());
            }
           #endregion
    
    CERMINEK
    CERMINEK --- ---
    TENCOKACISTROMY: Paradox zadání úlohy - nechci class diagram vestavěný ve VisualStudiu, ale nemusí to být vyloženě UML... Vyber si :)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    yEd nema zadnej import ani synchronizaci se zdrojakama (mozna na to exituje nejakej tool, pac format pro yEd je *.xml).

    CERMINEK: A ty obycejny diagramy ve VS ti nestaci, kdyz nechces vylozene UML?
    Kliknutím sem můžete změnit nastavení reklam