Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: C# und .NET ::  MySql auf Änderung überprüfen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Korkenzieher
Unregistrierter




Beitrag Korkenzieher Unregistrierter 20:18:03 07.03.2010   Titel:   MySql auf Änderung überprüfen            Zitieren

Hallo. Ich bins schon wieder :D

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:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
        }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
        }


Gibt es da nicht eine einfachere Methode? Ohne laggen?
z.B wie textChanged();

mfg
mogel
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2009
Beiträge: 510
Beitrag mogel Mitglied 22:32:12 07.03.2010   Titel:              Zitieren

Du erstellst alle 500ms eine neue Verbindung ... das kostet Dich die Zeit ... Stichwort: Connection-Pool

_________________
.http://www.fantasya-pbem.de. - Fantasy-Multiplayer-Strategie - Runden basiert
witte
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.01.2008
Beiträge: 1295
Beitrag witte Mitglied 10:00:08 08.03.2010   Titel:              Zitieren

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.
Korkenzieher
Unregistrierter




Beitrag Korkenzieher Unregistrierter 17:47:08 08.03.2010   Titel:              Zitieren

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
C/C++ Forum :: C# und .NET ::  MySql auf Änderung überprüfen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.