O que constitui um método caro ou recurso?

votos
1

Menciona-se com bastante frequência que as exceções são caros, e vários métodos em .NET são caros, também.

O que exatamente constitui um método caro em .NET?

É o tempo necessário para o método para processar? EG Eu tenho o fluxo de resposta de uma página web usando o objeto WebClient (este não era assíncrona), e quando chegar a resposta e atribuí-la a uma variável, demorou um tempo para passar por esta linha de código. Talvez porque a própria página web era gráfico intensivo e de grande porte. Para ver o tempo, estou ciente de que posso usar um cronômetro ou temporizador (há uma diferença sutil entre os dois que eu não me lembro).

Ou é os recursos tomadas? Se sim, qual é a melhor maneira de ver os recursos de um método leva? Eu sei que eu posso usar um dos métodos GC, ou um profiler. Que outras abordagens estão lá?

Publicado 10/12/2008 em 02:32
fonte usuário
Em outras línguas...                            


4 respostas

votos
9

Caro é uma questão de graus e contexto.

Eu trabalho no processamento de imagem e considero divisão caro. No meu caso, qualquer operação que acaba sendo realizado de duas a 5 milhões de vezes em um ciclo acrescenta-se. Esta pode ser a diferença entre 1/8 de um segundo e 1/32 de um segundo. 1/8 de um segundo no tempo UI é muito para uma exibição dinâmica. 1/32 é aceitável.

Em outros casos, pode ser cheia de decodificação de imagens JPEG grandes e escalando-os para baixo, em vez de tirar proveito do poder de 2 versões escalados para baixo também codificadas no mesmo arquivo.

Com o tempo página web, pode ser o número de visitas de servidor em um carregamento da página. Veja o que eu quero dizer?

O contexto é tudo.

Recursos são considerados caros, se eles são escassos e causar outras coisas que esperar. Se você tem um disco não-RAID, você paga um preço pesado sobre o acesso se dois processos estão saltando da cabeça por todo o lugar, daí a forte dependência de cache tanto no disco e no sistema operacional.

A impressora é um recurso muito caro, especialmente se for fora do papel, daí a fila.

As exceções são caros quando comparados com outros recursos de linguagem. método estático invocação é barato. método simples invocação é um pouco mais caro. método virtual invocação é um pouco mais caro. Exceções são muito mais caros.

Por exemplo, você poderia reclamar o C # não tem tipos de retorno polimórfica tipo-forte, e eu poderia dizer - oh não, não - apenas jogar o seu resultado e pegar o tipo certo do outro lado. Então eu me ri para fora da sala para fazer a sugestão. Comparado com um retorno (que é a escassos instruções), uma excepção pode causar dezenas a centenas, dependendo do contexto.

Respondeu 10/12/2008 em 02:44
fonte usuário

votos
1

Sim, quando as pessoas falam sobre as funções de ser caro, que normalmente significa em termos de tempo de execução. (O preço que você paga para chamá-lo é que o fio fica bloqueado para microssegundos X até que a chamada de função completa, depois de tudo)

Claro, ele também pode ser caro em termos de utilização de recursos, mas geralmente, é o tempo de execução que as pessoas se referem.

Respondeu 10/12/2008 em 03:48
fonte usuário

votos
0

Concordo com Plint, mas eu gostaria de acrescentar que caro normalmente implica que algo leva mais tempo ou recursos do que seria de esperar, ou mais recursos do que você precisa para uma dada situação. Em geral, algo é caro se existe uma alternativa que usa menos CPU ou recursos que é mais apropriado.

Por exemplo, as exceções são considerados caros por causa da quantidade de ciclos de relógio que é preciso para construir um rastreamento de pilha. Portanto, é uma idéia muito ruim para usar exceções como um mecanismo de controle de fluxo. Então, se você estava analisando um formato de dados personalizado e foi mal formada, isso provavelmente seria melhor para retornar um objeto com um status de falha e string (linha de dados malformado 6, pos 3), ao invés de jogar um MalformedDataException.

Mas sim, caro é uma questão de grau e perspectiva. Para um designer CPU, um cache miss é desastroso. Para Plint, a divisão é caro. Para mim, o acesso disco rígido é caro.

Respondeu 10/12/2008 em 04:59
fonte usuário

votos
0

A resposta é que você tem ambos os tipos de operações caras.

Eu pessoalmente uso Formigas Profiler por RedGate para mointor o tempo e aspectos da memória de eventos de aplicação eo custo.

Respondeu 10/12/2008 em 02:35
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more