Compartilhar via


Componentes multithread e evento logs

Os logs de evento são para manter o controle de eventos significativos quando um aplicativo está sendo executado.Usando logs de eventos, você pode registro informações que podem ser úteis para análise de desempenho ou solução de problemas.Existem outras considerações quando o registrar registrar registrar em log de eventos com componentes multissegmentados.Primeiro, deve haver um mecanismo para registrar a identidade do thread a mensagem de registrar registrar registrar em log.Segundo, segurança do segmento deve ser levada em conta ao interagir com o log de eventos.O thread tentar gravar uma mensagem deve obter um bloquear exclusivo no log para evitar condições de corrida.Para obter uma visão geral de evento logs, consulte Administrando evento logs.Para obter mais informações sobre acesso thread-safe, consulte Componentes do thread-safe.

Para identificar cada thread, você deve conjunto o Propriedade Thread.nome.Essa propriedade utiliza e retorna um String valor e pode ser usado para conjunto um identificador exclusivo para cada segmento. Esse valor, em seguida, pode ser passado para o Método EventLog.CreateEventSource para designar o thread sistema autônomo um fonte do evento para cada segmento.Quando o registrar registrar registrar em log de eventos, seu thread pode conjunto o Source propriedade do registrar registrar registrar em log de eventos ao nome, garantindo assim precisa registrar registrar registrar em log de eventos.

Durante a execução de várias linhas de código em um ambiente multithreaded, é importante que os threads obtém bloqueios exclusivo na evento log antes de executar qualquer código.Por exemplo, considere as seguintes linhas de código, executado em um ambiente multithreaded:

MyEventLog.Source = Threading.Thread.CurrentThread.Name.ToString
EventLog.WriteEntry("What thread did this come from?", "myApplication")
MyEventLog.Source = System.Threading.Thread.CurrentThread.Name.ToString();
EventLog.WriteEntry("What thread did this come from?", "myApplication");

Se vários segmentos estão executando essas linhas ao mesmo tempo, se é possível que um thread alterar o Propriedade EventLog.fonte do log de eventos e para outro thread gravar uma mensagem, depois que essa propriedade tinha sido alterada.Para evitar condições sistema autônomo essas, você pode usar o demonstrativo SyncLock (Visual Basic) ou lock demonstrativo (translation from VPE for Csharp) para obter um bloquear exclusivo no objeto antes de executar o código de vários threads. Usando o bloqueio, o exemplo anterior deverá parecer com o seguinte:

SyncLock MyEventLog
   MyEventLog.Source = System.Threading.Thread.CurrentThread.Name.ToString
   EventLog.WriteEntry("What thread did this come from?", "myApplication")
End SyncLock
lock(MyEventLog)
{
   MyEventLog.Source = Threading.Thread.CurrentThread.Name.ToString();
   EventLog.WriteEntry("What thread did this come from?", 
      "myApplication");
}

Você também pode usar o Debug e Trace classes para registrar eventos que ocorrem em aplicativos multissegmentados. Essas classes são classes estáticas que permitem enviar saída para a janela de saída, a janela do console, um arquivo de texto ou o log de eventos ou qualquer Outros de um número de objetos.Para obter detalhes, consulte Rastreamento e instrumentação a aplicativos no Visual Basic e Visual translation from VPE for Csharp.

Consulte também

Tarefas

Como: Eventos de log para componentes multithread

Outros recursos

Multithreading in Components