Ulepszenia wydajności gniazda w wersji 3.5Socket Performance Enhancements in Version 3.5

System.Net.Sockets.SocketKlasa została ulepszona w wersji 3,5 do użycia przez aplikacje korzystające z operacji we/wy sieci asynchronicznej w celu osiągnięcia najwyższej wydajności.The System.Net.Sockets.Socket class has been enhanced in Version 3.5 for use by applications that use asynchronous network I/O to achieve the highest performance. Seria nowych klas została dodana jako część zestawu ulepszeń Socket klasy, która zapewnia alternatywny wzorzec asynchroniczny, który może być używany przez wyspecjalizowane aplikacje gniazd o wysokiej wydajności.A series of new classes have been added as part of a set of enhancements to the Socket class that provide an alternative asynchronous pattern that can be used by specialized high-performance socket applications. Te ulepszenia zostały zaprojektowane specjalnie dla aplikacji serwer sieci, które wymagają wysokiej wydajności.These enhancements were specifically designed for network server applications that require high performance. Aplikacja może używać rozszerzonego wzorca asynchronicznego wyłącznie lub tylko w przeznaczonych na gorąco obszarach aplikacji (na przykład w przypadku otrzymywania dużej ilości danych).An application can use the enhanced asynchronous pattern exclusively, or only in targeted hot areas of their application (when receiving large amounts of data, for example).

Udoskonalenia klasClass Enhancements

Główną funkcją tych ulepszeń jest unikanie powtarzania alokacji i synchronizacji obiektów w przypadku operacji we/wy na wysokim poziomie.The main feature of these enhancements is the avoidance of the repeated allocation and synchronization of objects during high-volume asynchronous socket I/O. Wzorzec projektowy Begin/End aktualnie zaimplementowany przez Socket klasę dla operacji wejścia/wyjścia gniazda asynchronicznego wymaga, System.IAsyncResult Aby obiekt został przydzielony dla każdej asynchronicznej obsługi gniazda.The Begin/End design pattern currently implemented by the Socket class for asynchronous socket I/O requires a System.IAsyncResult object be allocated for each asynchronous socket operation.

W nowych Socket udoskonaleniach klas asynchroniczne operacje gniazd są opisane przez obiekty klasy wielokrotnego użytku System.Net.Sockets.SocketAsyncEventArgs przydzielone i utrzymywane przez aplikację.In the new Socket class enhancements, asynchronous socket operations are described by reusable System.Net.Sockets.SocketAsyncEventArgs class objects allocated and maintained by the application. Aplikacje gniazd o wysokiej wydajności zapewniają najlepszą ilość nakładających się operacji gniazda, które muszą być utrzymywane.High-performance socket applications know best the amount of overlapped socket operations that must be sustained. Aplikacja może utworzyć dowolną liczbę SocketAsyncEventArgs obiektów, których potrzebuje.The application can create as many of the SocketAsyncEventArgs objects that it needs. Na przykład, jeśli aplikacja serwera musi mieć 15 gniazd operacji akceptujących przez cały czas do obsługi przychodzących połączeń klienta, może przydzielić 15 obiektów wielokrotnego użytku do SocketAsyncEventArgs tego celu.For example, if a server application needs to have 15 socket accept operations outstanding at all times to support incoming client connection rates, it can allocate 15 reusable SocketAsyncEventArgs objects in advance for that purpose.

Wzorzec wykonywania asynchronicznej operacji gniazda z tą klasą składa się z następujących kroków:The pattern for performing an asynchronous socket operation with this class consists of the following steps:

  1. Przydziel nowy SocketAsyncEventArgs obiekt kontekstu lub uzyskaj bezpłatnie jeden z puli aplikacji.Allocate a new SocketAsyncEventArgs context object, or get a free one from an application pool.

  2. Ustaw właściwości obiektu kontekstu na operację, która ma zostać wykonana (na przykład metodę delegata wywołania zwrotnego i bufor danych).Set properties on the context object to the operation about to be performed (the callback delegate method and data buffer, for example).

  3. Wywołaj odpowiednią metodę Socket (xxxAsync) w celu zainicjowania operacji asynchronicznej.Call the appropriate socket method (xxxAsync) to initiate the asynchronous operation.

  4. Jeśli asynchroniczna metoda Socket (xxxAsync) zwraca wartość true w wywołaniu zwrotnym, zbadaj właściwości kontekstu pod kątem stanu ukończenia.If the asynchronous socket method (xxxAsync) returns true in the callback, query the context properties for completion status.

  5. Jeśli asynchroniczne gniazdo Metoda (xxxAsync) zwróci wartość false w wywołaniu zwrotnym, operacja została zakończona synchronicznie.If the asynchronous socket method (xxxAsync) returns false in the callback, the operation completed synchronously. Właściwości kontekstu mogą być zapytania dla wyniku operacji.The context properties may be queried for the operation result.

  6. Ponownie Użyj kontekstu dla innej operacji, umieść go ponownie w puli lub Odrzuć.Reuse the context for another operation, put it back in the pool, or discard it.

Okres istnienia nowego obiektu kontekstu operacji gniazda asynchronicznego jest określany przez odwołania w kodzie aplikacji i asynchronicznych odwołaniach we/wy.The lifetime of the new asynchronous socket operation context object is determined by references in the application code and asynchronous I/O references. Nie jest konieczne, aby aplikacja zachowała odwołanie do obiektu kontekstu operacji gniazda asynchronicznego po przesłaniu go jako parametru do jednej z asynchronicznych metod operacji gniazda.It is not necessary for the application to retain a reference to an asynchronous socket operation context object after it is submitted as a parameter to one of the asynchronous socket operation methods. Pozostanie przywoływany do momentu wywołania zwrotnego zakończenia.It will remain referenced until the completion callback returns. Jest to jednak korzystne dla aplikacji, aby zachować odwołanie do obiektu kontekstu, dzięki czemu można go ponownie użyć do przyszłej asynchronicznej operacji na gnieździe.However it is advantageous for the application to retain the reference to the context object so that it can be reused for a future asynchronous socket operation.

Zobacz teżSee also