Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 19555|Vastaus: 0

[Lähde] C# Korkean suorituskyvyn Tcp-sokettien käyttötarkoitukset

[Kopioi linkki]
Julkaistu 2.11.2016 9.53.37 | | |

Seuraavassa on yhteenveto suorituskykyisen socket-komponentin toteutuksen ongelmista: jos tarvitset vain tuhansia samanaikaisia sovelluksia, voit kiinnittää huomiota koodin kirjoittamiseen, mutta sinun täytyy kohdata kymmeniä tuhansia tai kymmeniä tuhansia samanaikaisia sovelluksia. Seuraavien kysymysten yhteenveto uskotaan olevan suureksi avuksi tämän hakemuksen kirjoittamisessa.

SocketAsyncEventArgs

Tämä objekti on saatavilla .NET 2.0 sp1:n jälkeen ja sitä käytetään pääasiassa suorituskykyisen socket-datan lähetys- ja vastaanottoprosessoinnin toteuttamiseen (yksityiskohtaisempaa esittelyä varten voit mennä MSDN:lle). Tämä olio tarjoaa kolme tapaa asettaa puskurit lähetyksiin ja vastaanottoon: SetBuffer(Int32, Int32), SetBuffer(Byte(), Int32, Int32, BufferList, ensimmäiset kaksi eivät voi toimia rinnakkain jälkimmäisten kanssa ( MSDN selittää miksi). Kun asetat puskurin, olipa se sitten SetBuffer(Byte(), Int32, Int32) tai BufferList, yritä asettaa se vain kerran per SocketAsyncEventArgs -instanssi ohjelman elinkaaren aikana, sillä tämä asetus voi olla hyvin resurssikuluttava. On suositeltavaa asettaa datapuskuri SetBuffer(Byte(), Int32, Int32) kautta SocketAsyncEventArgsin rakentamisen aikana, ja sen jälkeen käyttää SetBuffer(Int32, Int32) sen käsittelyyn. Kun haluat asettaa BufferListin, on parasta olla <byte>vaihtamatta IListin viitamaa tavua[] <ArraySegment>lähdekoodia. Jos sitä muutetaan, se saa SocketAsyncEventArgsin sitomaan puskurin uudelleen ja vaikuttamaan tehokkuuteen.

SocketAsyncEventArgs pool

Kuten yllä mainittiin, yritä olla muuttamatta SocketAsyncEventArgsin viittaamaa puskuria mahdollisimman paljon tämän tavoitteen saavuttamiseksi. Siksi on tarpeen rakentaa SocketAsyncEventArgs-sovelluspooli ja alustaa SocketAsyncEventArgs-objekti mahdollisimman paljon ohjelman alussa. SocketAsyncEventArgsin luomisen vähentämisen lisäksi poolien rakentaminen voi myös säästää huomattavasti muistia. Pääsyy on se, ettet voi tietää, kuinka suuri kukin viesti on, tietenkin voit antaa viestille maksimirajan ennen suunnittelua ja asettaa puskurin vastaamaan SocketAsyncEventArgsia. Tämä on kuitenkin suuri muistin hukka, koska kaikilla viesteillä ei ole maksimipituutta. Varaa sopiva määrä puskurikokoa SocketAsyncEventArgsille, tarjoa kutsuja poolien kautta ja kirjoita joustavasti viestejä yhdelle tai useammalle SocketAsyncEventArgsille tai tallentaa useita viestejä yhteen SocketAsyncEventArgs-järjestelmään käsittelyä varten.

jono

Näen, että monissa käytännöissä säikeiden avaaminen suoraan tai niiden heittäminen säikeiden pooliin datan vastaanottamisen jälkeen, mikä on todella huono asia, koska se ei hallitse säikeiden työtä paremmin, mukaan lukien säikeiden odotus. Mukautetuilla säikeillä + jonoilla voit hallita, kuinka monta säiettä on vastuussa mistä työstä, ja jonotettu työ on vain jonossa; Säikeitä ei ole suurta määrää tai paljon rivejä odottamassa, mikä aiheuttaa käyttöjärjestelmän resurssien menetyksen säikeiden ajoituksen vuoksi.

Viivästynyt datan yhdistäminen

Viivästetty yhdistämistiedonsiirto on keino ratkaista liiallinen verkon IO-toimintojen ongelma, jota ei monissa tilanteissa käytetä, mutta se on yleistä pelipalvelimilla. Joku kysyi minulta aiemmin, jos skenessä on 400 käyttäjää, jokaisen käyttäjän ympäristön muutos kertoo muille käyttäjille. Jos yhdistettyä dataa ei käytetä, syntyy erittäin pelottava verkon IO-toiminto, joka on IO-operaationumerojärjestelmälle vaikea kantaa. Siksi on tarpeen yhdistää ja lähettää data sopivan viivevälin sisällä nykyiselle sovellukselle.




Edellinen:c# EF salaa tietokantayhteysmerkkijonot
Seuraava:Highcharts näyttää useita sarjoja
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com