2.6 - Manage the object life cycle (Thought experiment)

Description

70-483 C# Flashcards on 2.6 - Manage the object life cycle (Thought experiment), created by Thiago Russo on 03/05/2017.
Thiago Russo
Flashcards by Thiago Russo, updated more than 1 year ago
Thiago Russo
Created by Thiago Russo almost 7 years ago
2
0

Resource summary

Question Answer
Limpando seu material Vc criou seu primeiro app Windows 8. É um jogo q permite aos usuários gravar um vídeo de si mesmos descrevendo uma palavra. Outros têm que adivinhar; Dessa forma, eles podem ganhar pontos q lhes permitam criar um vídeo mais longo. Um dia vc acorda e percebe q a Microsoft escolheu o seu aplicativo como app da semana. Seu servidor web q está rodando toda a lógica do jogo está tremendo sob a carga do usuário por causa da súbita popularidade. Ambos as pressões de memória e CPU são muito mais elevados do q o esperado. Vc tem alguns tipos q são qualificados para ser um tipo de valor, mas no momento de criar seu app, você usou classes. 1. Como pode utilizar os tipos de valor qdo possível melhorar o seu desempenho? Ou poderia ser que seu desempenho irá deteriorar-se mais? 1. Tipos de referência estão no heap e são gerenciados pelo coletor de lixo. Tipos de valor estão na stack a maior parte do tempo e são liberados qdo o método atual termina. Qdo um tipo de valor está na stack, ele ocupa menos memória do que seria na heap. No entanto, se um tipo de valor está dentro de um tipo de referência, ele ainda está na heap. A alteração do tipo para um struct há garantia de q a sua pressão de memória vai cair.
2. Por que implementar IDisposable é importante para reduzir a pressão de memória? É sempre melhor chamar Dispose em um elemento, assim que você terminar com ele? 2. IDisposable oferece uma maneira de liberar explicitamente recursos n gerenciados e vc n terá q esperar para o coletor de lixo para liberar memória. No entanto, chamar Dispose é algo que custa tempo de CPU. Ao deixar as coisas para o coletor de lixo, o GC irá decidir qdo é o melhor momento para começar a chamar finalizadores. Existe um compromisso para estabelecer entre explícitamente ou implicitamente, liberando seus recursos.
3. Você deve implementar um finalizador em todos os seus tipos que implementam IDisposable? 3. Uma classe que implementa IDisposable deve ter alguns recursos não gerenciados. Um finalizador é importante para se certificar de q um item sempre libera os recursos não gerenciados, mesmo quando Dispose não é chamado. No entanto, uma classe com um finalizador é tratada de um modo especial. O objeto é adicionado a uma fila de finalização e é mantido na memória até que o finalizador ser executado. É importante certificar-se de que, quando Dispose é chamado, o objeto é explicitamente removido da fila de finalização.
4. Você tem alguns itens que são usados muito. Seria sábio colocá-los em um campo estático para que você não tem que recriá-las cada vez? Um campo estático é uma referência raiz; o GC nunca vai liberar um objeto que é referenciado por um campo estático. Neste caso, seria melhor usar um cache que mantém o controle de quais objetos devem ser mantidos na memória. Um algoritmo de caching que decide sobre a frequência com que um objeto é acessado pode ter certeza de que seus objetos estão ao redor. No entanto, quando há uma falta de memória, o cache pode transformar alguns objetos em WeakReferences e certifique-se que eles podem ser lixo coletado.
Show full summary Hide full summary

Similar

Porova teórica C# mod l
Cursos Professor Jonatã
Linguagem C#
Alex Araujo Furado
Prova teorica C# mo ll
Cursos Professor Jonatã
Entity framework - code first
José Fernandes
Flashcard Módulo 1 - XAMARIN LATINO AMERICA
Marcone Barbosa
Entity framework
José Fernandes
C# and ASP.NET
Kalebi Fiorentini
Linguagens de programação
Rodrigo Barbosa7452
Conceitos do ASP.NET CORE (Incompleto)
José Fernandes Rezende Neto
Dates and times .NET
Felipe Couto Viola
Fluxo Game UC 8
Lucas Coluzzo