Pergunta

agora eu tenho um gargalo no meu programa que estou tentando escrever.estou tentando usar um gesto de pinça para controlar a escala de uma UIImage.é o cálculo da escala que está fazendo com que o programa fique lento e instável.abaixo está a equação.

currentScale = (currentDistance / initialDistance) * scaleMod;

scaleMod é qualquer que seja a escala atual em que o usuário tirou os dedos da tela.portanto, da próxima vez que o usuário apertar, a escala antiga será essencialmente o ponto de partida da nova ação de escala.

Foi útil?

Solução

1) Você não consegue calcular scaleMod / initialDistance uma vez enquanto currentDistance está mudando.Dessa forma, você só precisa fazer esse valor vezes currentDistance, o que remove uma divisão.

2) Certifique-se de que este é realmente o gargalo.Provavelmente não é, a menos que você esteja fazendo algo realmente errado.

Outras dicas

Para qualquer tipo de três VARs, esse cálculo pode ser feito facilmente milhões de vezes por segundo com pouco impacto no desempenho. Seu problema está em outro lugar.

Sim, adicionar um servidor é uma opção.Provavelmente você está rastejando muito conteúdo ou os usuários estão criando cargas de consultas.Considere a pesquisa em busca para separar o servidor de aplicativos.

Não é uma boa prática executar a pesquisa e outros serviços de consumo de recursos nos servidores front-end, porque pode afetar a experiência do usuário.

Você não precisa colocar todos os serviços no servidor de aplicativos.Alguns podem ser executados em servidores front-end (Services do Excel, Perfil do usuário).Tudo depende do desempenho e carga do servidor.

Por favor, dê uma olhada na arquitetura para SP2013 da MS.É mesmo (muito semelhante) para SP2010: http:// www.microsoft.com / pt-us / download / confirmação.aspx? id= 37000

Você pode armazenar Scalemod / InitialDistance. Quando o Scaling estiver ativo (os dedos do usuário ainda estão na tela), multiplique esse valor pela Distância Current, conforme necessário.

Depois que o usuário terminar de apertar, armazene o novo valor ScalEmod / Initial -Distância para a próxima vez que a belisque acontecer.

Se você estiver fazendo computação com int (ou outro número inteiro), verifique se ele pode fazê -lo usando a precisão do float. A divisão de ponto flutuante é mais rápido que o número inteiro (menos bits para dividir, assumindo a sua CPU) possui unidade de ponto flutuante).

Além disso, tente levar a divisão como multiplicação por uma recíproca.

Verifique essa lista inicial! = 0 primeiro! :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top