EventSource.WriteEventCore(Int32, Int32, EventSource+EventData*) Metoda

Definice

Důležité

Toto rozhraní API neodpovídá specifikaci CLS.

Vytvoří nové WriteEvent přetížení pomocí poskytnutého identifikátoru události a dat události.Creates a new WriteEvent overload by using the provided event identifier and event data.

protected:
 void WriteEventCore(int eventId, int eventDataCount, System::Diagnostics::Tracing::EventSource::EventData* data);
protected void WriteEventCore (int eventId, int eventDataCount, System.Diagnostics.Tracing.EventSource.EventData* data);
[System.CLSCompliant(false)]
protected void WriteEventCore (int eventId, int eventDataCount, System.Diagnostics.Tracing.EventSource.EventData* data);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
protected void WriteEventCore (int eventId, int eventDataCount, System.Diagnostics.Tracing.EventSource.EventData* data);
member this.WriteEventCore : int * int * nativeptr<System.Diagnostics.Tracing.EventSource.EventData> -> unit
[<System.CLSCompliant(false)>]
member this.WriteEventCore : int * int * nativeptr<System.Diagnostics.Tracing.EventSource.EventData> -> unit
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
member this.WriteEventCore : int * int * nativeptr<System.Diagnostics.Tracing.EventSource.EventData> -> unit

Parametry

eventId
Int32

Identifikátor událostiThe event identifier.

eventDataCount
Int32

Počet položek dat události.The number of event data items.

data
EventSource.EventData

Struktura obsahující data událostiThe structure that contains the event data.

Atributy

Poznámky

eventid hodnota by měla být větší než 0 nebo menší než 65535 nebo se může v operaci vyskytovat chyba.eventid should be greater than 0 or less than 65535 or errors can occur in the operation. Pokud dojde k chybám, můžete získat další informace o zdroji chyby tím, že zkontrolujete výstupní datový proud ladicího programu, pokud máte k události, které proces vyvolává, připojen ladicí program.If errors do occur, you can get more information about the source of the error by checking the output stream of the debugger, if you have a debugger attached to the process firing events. Můžete také vyhledat chyby nahlášené v datovém proudu událostí ETW, pokud máte naslouchací proces trasování událostí pro Windows ve zdroji událostí, kde dojde k chybě.You can also look for errors reported in the ETW event stream, if you have an ETW listener on the event source where the error occurs.

Tato chráněná metoda umožňuje uživatelům definovat nová WriteEvent přetížení, která jsou rychlejší než poskytnutá přetížení.This protected method enables users to define new WriteEvent overloads that are faster than the provided overloads. Vytvoření nového přetížení zahrnuje nezabezpečený kód.Creating a new overload involves unsafe code. Základní postup je zařadit do zásobníku pole popisovačů dat události, které odpovídají počtu položek datové části.The basic procedure is to stack-allocate an array of event data descriptors that matches the number of payload items. Pro každou položku datové části nastavte správnou velikost a hodnotu v poli data události. Volejte WriteEventCore s inicializovaným polem.For each payload item, set the correct size and value in the event data array.Call WriteEventCore with the initialized array.

Následující příklad ukazuje, jak přidat WriteEvent přetížení, které přijímá čtyři argumenty.The following example shows how to add a WriteEvent overload that accepts four arguments. Příkladem může být událost protokolování, která zapisuje řetězec a 3 celá čísla.An example would be if you have a logging event that logs a string and 3 integers.

[Event(1)]  
public void LogTime(string tag, int hour, int minute, int second)   
{  
    WriteEvent(1, tag, hour, minute, second);  
}  

To můžete provést bez volání WriteEventCore , ale bude pomalejší, než je potřeba.You could do this without calling WriteEventCore, but it would be slower than it needs to be. To je proto, že používá pole a odraz k tomu, abyste zjistili, co dělat.That is because it uses arrays and reflection to figure out what to do. Pokud se jedná o vysokou míru (> 1000/s), může se jednat o rychlý pomocníka, jak je znázorněno v následujícím příkladu.If you log these at a high rate (> 1000 / sec), it can be worth making a fast helper, as shown in the following example. Metoda nastínuje existující WriteEvent .The method shadows the existing WriteEvent. Proto původní volající kód (LogTime) se ve skutečnosti nemění, ale kompilátor jazyka C# bude používat konkrétnější verzi, která bude rychlejší.Thus the original caller code (LogTime) does not actually change, but the C# compiler will use the more specialized version which will be faster.

Chcete-li zkompilovat nezabezpečený kód, je nutné zadat možnost kompilátoru /unsafe (možnosti kompilátoru C#) .To compile unsafe code, you must specify the /unsafe (C# Compiler Options) compiler option.

class AnotherEventSource : EventSource {  

    [NonEvent]  
    public unsafe void WriteEvent(int eventId, string arg1, int arg2, int arg3, int arg4)  
    {  

        fixed (char* arg1Ptr = arg1)  
        {  
            EventData* dataDesc = stackalloc EventData[4];  

            dataDesc[0].DataPointer = (IntPtr)arg1Ptr;  
            dataDesc[0].Size = (arg1.Length + 1) * 2; // Size in bytes, including a null terminator.   
            dataDesc[1].DataPointer = (IntPtr)(&arg2);  
            dataDesc[1].Size = 4;  
            dataDesc[2].DataPointer = (IntPtr)(&arg3);  
            dataDesc[2].Size = 4;  
            dataDesc[3].DataPointer = (IntPtr)(&arg4);  
            dataDesc[3].Size = 4;  

            WriteEventCore(eventId, 4, dataDesc);  
        }  
    }  
}  

Platí pro