Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 21695|Antwort: 1

[Quelle] .net/c# Sei vorsichtig mit Ereignissen, die dein Programm belasten.

[Link kopieren]
Veröffentlicht am 21.09.2016 16:05:58 | | | |
Ereignisse werden im Hauptthread geladen und ausgeführt, und wenn das erste Ereignis im Hauptthread nicht abgeschlossen ist, kommt man zum zweiten Ereignis – genau wie bei anderen Programmen im Hauptthread – wartet, bis das vorherige fertig verarbeitet ist, bevor das nächste oder ein anderes Programm oder Ereignis im Hauptthread verarbeitet wird.




Das obige ist, dass ich selbst ein Objekt kapselt habe, und im Objekt habe ich selbst ein Ereignis eingeschlossen.

Ich verarbeite Daten im Rahmen des Abonnements auf Ereignisse, wie zum Beispiel den Bildannotationsteil,

Weil das Ereignis, das ich abonniert habe, eine Read-txt-Datei war und meine TXT-Datei 50.000 Zeilen hatte, wodurch die Event-Methode 50.000 Mal ausgelöst wurde.

Als ich dann das Programm ausführte, stellte ich fest, dass meine Benutzeroberfläche sich in einem Zustand der Suspendierung befand, und ich wusste, dass dort ein Problem vorliegen musste.

Zunächst dachte ich, es sei die Manipulation der UI-Steuerungen in der Methode, die den falschen Tod verursacht hat.

Dann stellte sich Schritt für Schritt heraus, dass beim Hinzufügen der Daten bereits in einen Zustand der Suspendierung eingetreten war.

Warum??? Schließlich habe ich im Internet herausgefunden, dass das Event im Hauptthread ist und wenn das erste Event nicht verarbeitet wird, wird die Ausführung des nächsten Events blockiert.

Im Allgemeinen verstand ich, was ich befohlen habe, um es klar zu sagen: 50.000 Ereignisse führten dazu, dass das Programm blockiert wurde, und dann geriet ich in einen Zustand der Suspendierung.

Lösung:

Für einige einfache Ereignisse, die nicht zur Ausführung einer großen Anzahl von Ereignismethoden führen, können direkt in die Ereignismethode geschrieben werden.

Für eine große Anzahl von Ereignismethoden hoffe ich, dass du einen Thread eröffnest, um damit umzugehen, wie zum Beispiel: Socket oder HTTPLISTENER usw. (die Datenmenge ist klein und du kannst sie nicht sehen, sobald die Datenmenge groß ist, haha, stirbt sie direkt)




Vorhergehend:C# generiert E-Mail-Adresscodes in großen Mengen
Nächster:Cloud-Broadcast-Player-Analyse, Thunderbolt- und QQ-Wirbelwind-Schnittstellenanalyse
Veröffentlicht am 22.09.2016 09:23:17 |
Jemand hat sehr gut gepostet, Support
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com