MySql auf Änderung überprüfen
-
Hallo. Ich bins schon wieder
ICh habe einen Chat in C# programmiert. Alle Nachrichten speichere ich auf einer MySQL Datenbank. Nun möchte ich alle 100ms überprüfen ob sich der Text geändert hat. Habe auch schon einen passenden Code geschrieben, aber es gibt 2 Schwachpunkte:
1. Er schreibt den ganzen Text nocheinmal. Ich möchte nur, dass der neue Text hinzugefügt wird.
2. Es laggt extrem. Ein Buchstabe benötigt um die 500ms um getippt zu werden.Hier mal mein Code:
[cs]private void timer1_Tick(object sender, EventArgs e) { string b = ""; //textBox1.Text = ""; string connectionString = "Server=db4free.net;Uid=korkenzieher;Pwd=Parafreak; Database=dolbydisk;"; // Verbidnung herstellen MySqlConnection connection = new MySqlConnection(connectionString); //Verbindung herstellen connection.Open(); MySqlCommand command = new MySqlCommand("SELECT * FROM Chat", connection); //Liste Chat als zu lesende Liste wählen MySqlDataReader Reader; //Initialisieren eines REaders Reader = command.ExecuteReader(); while (Reader.Read()) //LEsen aus der Datenbank { string row = ""; for (int i = 0; i < Reader.FieldCount; i++) { b += Reader.GetValue(i).ToString() + "\n "; //Speichern in einen String b += "\r\n"; } b += "\n"; } Reader.Close(); if (textBox1.Text.Equals(b)) //Wenn sich nichts geändert hat dann nichts machen { } else //Fals doch einen Ton abspielen und ALLES refreshen { SoundPlayer sp = new SoundPlayer(Chat.Musik.Resource1.type); sp.Play(); textBox1.Text = b; } textBox1.SelectionStart = textBox1.Text.Length; //Scrollbar nach unten setzen textBox1.ScrollToCaret(); //Scrollbar nach unten setzen }[/cs]
Gibt es da nicht eine einfachere Methode? Ohne laggen?
z.B wie textChanged();mfg
-
Du erstellst alle 500ms eine neue Verbindung ... das kostet Dich die Zeit ... Stichwort: Connection-Pool
-
Connection Pooling sollte aber vom Anwendungsentwickler transparent passieren, er sollte da nichts weiter machen müssen. ALternativ kann er ja die Verbindung nmal offen lassen um zu prüfen ob das schneller geht.
@Korkenzieher: Achte darauf dass deine Chattabelle einen Primärschlüssel besitzt (so'n Autoincrement-Teil) und teste nur mit diesem Schlüsselwert ob Änderungen stattgefunden haben: speichere im Client den Primärschlüsselwert der letzten Tabellenzeile und prüfe bei einem Neukonnekt ob schon wieder eine neue Zeile eingetragen wurde indem du nur den Primkey-Wert der letzten Zeile ausliest und mit dem Wert in der App vergleichst. Lade nur im Änderungsfall den Chattext neu rein.
-
Ist Connection-Pool ein C# Befehl oder ein MYSQL Befehl? Und was bringt er mir?
Es läuft nun eindeutig schneller indem ich die Verbindung wirklich nur am Anfang aufbaue und dann öffen lasse.Aber wie mache ich das, dass nur die NEUEN reingeschrieben werden?
@witte:
Ich verstehe was du meinst: Dass ich immer mit dem Text einen Zufallscode mitgebe und den immer überprüfe? Mein Problem dabei wäre aber: Wie komme ich genau in diese letzte Zeile wo der Code stehen sollte? Und wie schneide ich diesen Code dann wieder aus der TextBox aus?Der Code muss noch sehr verbessert werden: Ich bin also für alle IDeen offen^^
mfg