Uso de memória com eficiência quando você compilação projetos grandes
Projetos grandes geralmente contêm muitos subprojetos e outras dependências e eles podem consumir muita memória de sistema na compilação time.Quando a memória disponível no sistema é reduzida, o desempenho do sistema também ser diminuído.MSBuild 3.5 facilita a esse problema ao descarregar projetos da memória sistema autônomo concluir a criação, mas mantendo seus resultados de compilação em um cache para recuperação posterior.
Descarregamento de projetos, cache e recuperando resultados
Em versões anteriores do MSBuild, projetos permaneceram na memória depois que eles foram criados. MSBuild 3.5 apresenta uma propriedade de tarefas chamada UnloadProjectsOnCompletion, que permite que você remover um projeto de memória após conclusão do edifício.
No entanto, quando um projeto foi descarregado da memória, não é possível recarregar na mesma instância de compilação.Porque uma compilação geralmente tem destinos que devem ser chamados para reunir informações em um projeto, descarregar um projeto da memória durante uma compilação pode causar problemas.Para resolver isso, MSBuild 3.5 apresenta outra propriedade chamada UseResultsCache, que pode ser usado para armazenar em cache os resultados de destino (por exemplo, os resultados de compilação, itens e propriedades) de todos os projetos que estão sendo criados.
Porque um projeto ocupa mais memória do que seus resultados de compilação, descarregar o projeto, mas mantendo seus resultados é um uso mais eficiente de memória.UnloadProjectsOnCompletion e UseResultsCache trabalham juntos para melhorar o desempenho de compilação não apenas pela liberação de memória, mas também permitindo MSBuild para recuperar os resultados de compilação diretamente da memória em vez de arquivos no disco.
Exemplo
O exemplo a seguir demonstra como usar UnloadProjectsOnCompletion e UseResultsCache. Neste exemplo, existem dois projetos, MyProj1.proj e MyProj2.proj.
MyProj1.proj
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="default">
<Message Text="Project: MyProj1. Target: default" />
<CallTarget Targets="Normal" UseResultsCache="true"/>
</Target>
<Target Name="Normal" Outputs="Someoutput from second target">
<Message Text="Project: MyProj1. Target: second" />
</Target>
</Project>
MyProj2.proj
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="default">
<Message Text="Project: MyProj2.proj Target: default" />
<MSBuild Projects=" MyProj1.proj" Targets="default"
UnloadProjectsOnCompletion="true" />
<MSBuild Projects=" MyProj1.proj" Targets="Normal"
UnloadProjectsOnCompletion="true" >
<Output TaskParameter="TargetOutputs"
PropertyName="TargetOutput"/>
</MSBuild>
<Message Text="Output from project: MyProj2.proj target: second
= $(TargetOutput)" />
</Target>
</Project>
Quando você compilação MyProj2.proj na linha de comando usando msbuild.exe MyProj2.proj /tv:3.5, você verá a saída de destino normal de imprimir MyProj1 de MyProj2.