| Autor |
Beitrag |
avoid
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: So 22.07.12 12:16
problem:
- meine verschachtelung ist zu träge in der abarbeitung.
aufgabe der verschachtelung:
- siehe kommentare im quellcode.
- "mit diesem code möchte ich eingelesene daten mit vorhandenen abgleichen
und je nach ergebniss darstellen, bearbeiten und darstellen oder löschen".
frage:
- wie gehts besser (schneller in der abarbeitung)?
aktuell habe ich einen code der diesem kommentierten pseudocode entspricht:
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: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
| while (i < todaydata.Length) { string zeile = todaydata[i]; int lenge = zeile.Length; if (lenge >= 76) { if (dataSet1.Tables["LiveView"].Rows.Count > 0) { for (int y = 0; y < dataSet1.Tables["LiveView"].Rows.Count; ++y) { if (datensatz.parameter1 == dataSet1.Tables["LiveView"].Rows[y]["parameter1"].ToString()) { if (dataSet1.Tables["LiveView"].Rows[y]["typ"].ToString() == 1) { if (datensatz.typ == darf angezeigt werden) { } } if (dataSet1.Tables["LiveView"].Rows[y]["typ"].ToString() == 2) { if (datensatz.typ == darf angezeigt werden) { } } if (dataSet1.Tables["LiveView"].Rows[y]["typ"].ToString() == 3) { if (datensatz.typ == darf angezeigt werden) { } } } else { if (datensatz.typ == darf angezeigt werden) { } } } } else { if (datensatz.typ == darf angezeigt werden) { } } } } |
ich hoffe mir kann jemand dabei helfen diesen code um zu bauen das er nicht mehr so träge ist.
gruß, avoid
edit: beitrag umgeschrieben um ihn verständlicher zu machen.
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Zuletzt bearbeitet von avoid am Mi 25.07.12 09:22, insgesamt 3-mal bearbeitet
|
|
Th69
      

Beiträge: 4805
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: So 22.07.12 12:51
Hallo avoid,
bitte tue uns Helfern einen Gefallen und entferne die überflüssigen Leerzeichen am Anfang jeder Zeile (ich weiß, das ist ein bißchen Arbeit - am einfachsten wohl mit dem VS den selektierten Code per "Shift+Tab" formatieren und hier dann einfügen).
Und du solltest vorallendingen beschreiben, was dein Code machen soll, damit wir passende Optimierungen vorschlagen können.
|
|
avoid 
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: Mo 23.07.12 13:32
im grunde hab ich eine lange datei, die ich wieder und wieder ab rufe.
in der datei werden immer wieder neue daten unten angehängt auf die ich reagiere.
ich hab nun erst mal folgendes gemacht:
ich prüfe ob die bisher verarbeitetn datensätze in der aktuellen datei enthalten sind
und wenn ja entferne ich diese daraus um die schon bearbeiten datensätze nicht nochmal zu verarbeiten.
so bleiben nur neue daten die seit dem letzten durchlauf entstanden sind übrig.
das dataset1 ist für mich in diesem fall der puffer der den aktuellen bearbeitungsstand enthält.
was quasi noch nicht abgeschlossen ist.
ich denke das spart mir schon mal eine menge zeit noch bevor der obige code los geht.
obige code stell ich nun mehr in diese richtung um:
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:
| for (solange zähler1 < anzahl der datensätze; ++zähler) { if (aktueller datensatz == darf angezeigt werden) { if (aktueller datensatz != angezeigt) { } } else { if (aktueller datensatz == darf daten bearbeiten) { for (solange zähler2 < dataSet1.Tables["LiveView"].Rows.Count; ++zähler2) { if (richtige zeile (parameter1) gefunden) { } } } else { for (solange zähler2 < dataSet1.Tables["LiveView"].Rows.Count; ++zähler2) { if (richtige zeile (parameter1) gefunden) { } } } } } |
so klingt das konstruckt logischer oder?
ich versuche das mal umzusetzen und wenn es so schneller geht sag ich bescheid.
gruß, avoid
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
|
|
edmtop
Hält's aus hier
Beiträge: 6
WinXP, Win7, Win2K3, Win2K8, Linux
C++, c#, Java, Delphi7-Delphi XE2, PHP
|
Verfasst: Mo 23.07.12 14:04
Hallo,
wenn ich das richtig verstanden habe willst nur die Datensätze prüfen die bereits angelegt sind oder falls nicht einen neuen anzulegen.
Wie wäre es wenn du die Daten schon mal einschränkst z.B.
C#-Quelltext 1:
| dataSet1.Tables["LiveView"].Select("parameter1 = " + datensatz.parameter1) |
Damit musst du nicht alle Sätze betrachten. Falls kein Datensatz da ist kannst direkt einen neuen anlegen sonst nur die eingeschränkte Auswahl vergleichen.
|
|
avoid 
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: Mo 23.07.12 16:21
select funktioniert hier wohl auch wie bei anderen select abfragen?
cool.
wie müßte ich die abfrage zusammenstellen wenn ich das dataset in der spalte "Typ"
nach dem inhalt der string variablen typ durchsuchen will?
im grunde geht es doch nur so oder?
C#-Quelltext 1:
| DataRow[] liste = dataSet1.Tables["LiveView"].Select("Typ = 'bla'"); |
aber ich bekomme aus dem DataRow nicht die dataSet koordinaten um z.b. den eintrag zu löschen oder zu bearbeiten.
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
|
|
edmtop
Hält's aus hier
Beiträge: 6
WinXP, Win7, Win2K3, Win2K8, Linux
C++, c#, Java, Delphi7-Delphi XE2, PHP
|
Verfasst: Di 24.07.12 07:20
Das wäre so ein kleiner Beispiel wie es aussehen könnte.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| DataRow[] liste = dataSet1.Tables["LiveView"].Select("Typ = 'bla'"); foreach (DataRow row in liste) { row["Column"] = "Wert"; row.Delete(); } dataSet1.AcceptChanges(); |
|
|
avoid 
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: Di 24.07.12 18:41
kalppt wie du es beschrieben hast.
gibt es eine derartige möglichkeit auch für for schleifen?
die sind leider noch das einzige das sehr lange braucht.
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
|
|
edmtop
Hält's aus hier
Beiträge: 6
WinXP, Win7, Win2K3, Win2K8, Linux
C++, c#, Java, Delphi7-Delphi XE2, PHP
|
Verfasst: Mi 25.07.12 07:19
der Beispiel war ja für den Ersatz der for schleife, da du damit nicht über den ganzen dataset scrollen muss und nur die Zeilen erhellst die du zum bearbeiten brauchst. Um die while schleife zu optimieren musste man wissen was davor passiert, woher das die variable i kommt. Welche Vorbedingungen vorhanden sind um die schritte danach zu optimieren.
|
|
avoid 
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: Mi 25.07.12 09:21
die while schleife aus beitrag 1 ist jetzt eine for schleife.
C#-Quelltext 1:
| for (int i = 0; i < todaydata.Length; ++i) |
damit durchlaufe ich im grunde alle neuen datensätze.
da ich nun schon zuvor einenabgleich zwischen "daten vom letzten durchlauf" und "daten vom aktuellen durchlauf" mache
habe ich ja nur noch die wirklich seit dem letzten mal dazu gekommenen daten zu verarbeiten.
deine select lösung hilft mir dabei die angezeigten daten schneller zu prüfen,
wenn ein neuer datensatz einen angezeigten datensatz ändern oder löschen soll.
doch denwirklichen zeitfresser hab ich heute erst gefunden.
ich rufe die daten mittels "WebClient" ab.
nach dem start meiner anwendung braucht der WebClient immer erst mal ca. 10sec um an zu springen
obwohl er nur eine 4 bis 10 kb textdatei laden muß.
naja liegt evtl. auch am vpn.
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
|
|
|