PedroPinto 0 Posted May 14, 2019 Report Share Posted May 14, 2019 (edited) Boas pessoal, é o meu primeiro Tópico por isso desculpem se não fizer como deveria ser feito . Então é o seguinte: Estou a fazer um aplicação para desktop, inicialmente tinha feito em design time mas quando abria o formulário demorava muito a carregar os objetos. Tentei fazer em runtime, porem, ainda assim continua lento. Alguma sugestão? [Codigo Abaixo] private void metroLink() { if (MpnlBar.InvokeRequired) { MpnlBar.BeginInvoke((MethodInvoker)delegate { for (int i = 0; i < l.Length; i++) { l = new MetroLink { Size = new Size(75, 64), Location = new Point(i * 62 + 1114, 3), Image = Resources.Invalid, NoFocusImage = Resources.Invalid, ImageSize = 40, Anchor = ((AnchorStyles.Top) | AnchorStyles.Right), UseCustomBackColor = true, BackColor = Color.Transparent, Cursor = Cursors.Hand, Name = "ml" + i.ToString(), Visible = false, }; l.Click += new EventHandler(Estados_Click); MpnlBar.Controls.Add(l); } /*MetroLink*/ //Butão minimizar l[0].Image = Resources.Minimizar_Ativo; l[0].NoFocusImage = Resources.Minimizar_Passivo; //Butão maximizar l[1].Image = Resources.Maximizar_Ativo; l[1].NoFocusImage = Resources.Maximizar_Passivo; //Butão Restaurar l[3].Image = Resources.Restaurar_Ativo; l[3].NoFocusImage = Resources.Restaurar_Passivo; l[3].Location = new Point(1 * 62 + 1114, 3); l[3].Visible = true; //Butão Fechar l[2].Image = Resources.Desligar_Ativo; l[2].NoFocusImage = Resources.Desligar_Passivo; }); } } [{Também estou a carregar uma imagem num painel que tem propriedade dock.fill (para simular uma imagem em background) Ao todo tenho 3 painel, um para fazer de Header, outra que cobre o formulário todo e por fim um para carregar um userControl(mas esse fica invisivel até o utilizador clicar no button)}] Obrigado, Edited May 15, 2019 by M6 Formatação de código. Link to post Share on other sites
M6 150 Posted May 15, 2019 Report Share Posted May 15, 2019 O carregamento é sempre feito em runtime. Não há carregamento em em design time. O design time server apenas para desenhares os ecrãs com o rato uma vez que é significativamente mais simples e simpático do fazê-lo programáticamente. O que desenhas é depois carregado para memória em runtime. A performance implica um misto de variáveis, desde a quantidade de objetos envolvidos até à performance do teu computador, passando pelo "peso" que cada objeto tem no que toca a informação (de entre outras coisas). Se queres saber de onde vem o teu problema de performance, usa um profiler para compreenderes onde está a lentidão e foca-te em melhorar esse aspeto. No entanto, a minha experiência diz-me que se um ecrã é lento a carregar muito provavelmente não será pela quantidade de objetos visuais que o mesmo tem de mostrar mas sim pela informação que têm de obter e disponibilizar ao utilizador. 1 Report 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to post Share on other sites
PedroPinto 0 Posted May 15, 2019 Author Report Share Posted May 15, 2019 (edited) 2 horas atrás, M6 disse: O carregamento é sempre feito em runtime. Não há carregamento em em design time. O design time server apenas para desenhares os ecrãs com o rato uma vez que é significativamente mais simples e simpático do fazê-lo programáticamente. O que desenhas é depois carregado para memória em runtime. A performance implica um misto de variáveis, desde a quantidade de objetos envolvidos até à performance do teu computador, passando pelo "peso" que cada objeto tem no que toca a informação (de entre outras coisas). Se queres saber de onde vem o teu problema de performance, usa um profiler para compreenderes onde está a lentidão e foca-te em melhorar esse aspeto. No entanto, a minha experiência diz-me que se um ecrã é lento a carregar muito provavelmente não será pela quantidade de objetos visuais que o mesmo tem de mostrar mas sim pela informação que têm de obter e disponibilizar ao utilizador. Obrigado pela a resposta, Realmente eu só carrego 3 paineis , 4 link e 2 tile, mas penso que o que está a por o sistema lento é as imagens que esses objetos têm. Será que por estar a carregar muitas imagens png e ico ao mesmo tempo, origina a lentidão? Existe alguma forma de por os objetos a seres criados/mostrados em simultaneo? Edited May 15, 2019 by PedroPinto Link to post Share on other sites
M6 150 Posted May 16, 2019 Report Share Posted May 16, 2019 Sim, as imagens podem ter peso, quanto maiores/melhores mais lento será. Usa imagens com um tamanho/qualidade significativamente menor e testa se a lentidão vem daí. Não percebo bem o que queres dizer por criar/mostrar os objetos em simultâneo. Se a tua ideia é fazer isso em paralelo não creio que resulte, uma vez que a lentidão não vem da sequência mas sim da leitura dos ficheiros e do renderização das imagens. Não sei que máquina tens, mas a lentidão até pode ser apenas uma questão apenas no teu computador. 1 Report 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to post Share on other sites
PedroPinto 0 Posted May 16, 2019 Author Report Share Posted May 16, 2019 (edited) 5 horas atrás, M6 disse: Sim, as imagens podem ter peso, quanto maiores/melhores mais lento será. Usa imagens com um tamanho/qualidade significativamente menor e testa se a lentidão vem daí. Não percebo bem o que queres dizer por criar/mostrar os objetos em simultâneo. Se a tua ideia é fazer isso em paralelo não creio que resulte, uma vez que a lentidão não vem da sequência mas sim da leitura dos ficheiros e do renderização das imagens. Não sei que máquina tens, mas a lentidão até pode ser apenas uma questão apenas no teu computador. Inicialmente pensava utilizar tasks para fazer o tempo diminuir (adicionando tbm um SplashScreen enquanto estava a carregar etc..). Em relação a maquina, na empresa onde estou as maquina são boas o suficiente para este tipo de desenvolvimento (ao contrário da minha . . . ). Vou testar renderizar a imagem de fundo e ver se fica mais rápido. Update: Tinha um imagem de 3 megas(não admira que desse lag), reduzi para 200kb ficou muito mais fluido. Por exemplo eu tenho o main form da minha (Prototipo) e carrega todo de uma vez(fluido) Só quando faço o evento de expansão da tela (maximizar) e quando restauro a tela para o formato original é que os objetos demoram uma eternidade a mover de posição (atravéz do anchor), é normal ou posso fazer de outra forma (estava a pensar em criar um método onde mete-se as coordenadas de cada objeto para quando a tela fica cheia, porem não é eficaz porque depende da resolução do monitor. Tens alguma sugestão? Obrigado, Edited May 16, 2019 by PedroPinto Update: Solução encontrada Link to post Share on other sites
M6 150 Posted May 17, 2019 Report Share Posted May 17, 2019 Eu deixava no modo automático. Não me parece que consigas fazer os cálculos e o posicionamento dos objetos de forma mais rápida do que a plataforma o faz. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to post Share on other sites
PedroPinto 0 Posted May 17, 2019 Author Report Share Posted May 17, 2019 1 hora atrás, M6 disse: Eu deixava no modo automático. Não me parece que consigas fazer os cálculos e o posicionamento dos objetos de forma mais rápida do que a plataforma o faz. Eu até deixava só utilizando o anchor dava para o que queria. Mas o problema está durante a deslocação / quando expando o form e os objetos reactualizam as suas coordenadas. Em alguma app que desenvolves-te encontras-te algum problemas semelhante? Link to post Share on other sites
M6 150 Posted May 17, 2019 Report Share Posted May 17, 2019 Não me recordo de ter problemas de performance desse tipo. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to post Share on other sites
PedroPinto 0 Posted May 17, 2019 Author Report Share Posted May 17, 2019 2 minutos atrás, M6 disse: Não me recordo de ter problemas de performance desse tipo. Em alternativa, estou a pensar por uma espécie de loading screen, enquanto muda a propriedade visível = true para falso e quando terminarem metia a trus novamente. Porque já que não consigo diminuir o tempo, pelo menos se já não mostrar ao utilizador os objetos a desaparecerem já ficaria mais agradável para o utilizador. Sendo a minha primeira app não sei ao certo como devo fazer a otimização. Obrigado pelas resposta, em curto prazo :). Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now