Hallo Forumsteilnehmer, in C und µC bin ich recht fit. Neu ist für mich OOP mit .NET2.0/C#. Und zwar möchte ich aus Dateien, welche geloggte Daten (pro Zeile ein Datensatz) enthalten, selbige extrahieren. Nun soll einmal der Export in eine csv-Datei oder als Grafik auf den Bildschirm möglich sein. Wenn ich das Zeilenweise inkrementelle Lesen/Formatieren nun in eine eigene (statische) Klasse lege, vermeide ich zwar quasi doppelten Code, aber die Geschwindigkeit dürfte auch runtergehen, da ich die Methoden ja nicht inline qualifizieren kann und jede Datensatzzeile über den Stack läuft (nehm ich jedenfalls an). Die Loggerdateien können im Laufe der Zeit nämlich einigen Umfang annehmen. Wie löst man solch ein Problem elegant und grundsätzlich? Vielen Dank, Frank
Wieso sollte jede Datensatzzeile über den Stack laufen? Übergebs doch einfach per Referenz. Allerdings sollte das noch nicht einmal nötig sein, da die meisten Stringtypen (so mit Sicherheit auch der des .NET-Frameworks) nur eine Längenangabe sowie eine Referenz auf den eigentlichen Stringinhalt (auf dem Heap) enthalten. AFAIK wird bei einer Übergabe auch keine Kopie des Inhalts auf dem Heap angelegt, sondern nur, wenn man die Kopie des Strings verändert. Letzteres ist zumindest in Java so, in .NET will ich mich nicht festlegen (lies halt selbst die Doku), aber der Mechanismus sollte ähnlich funktionieren. Solange du einen Funktionsaufruf pro Zeile hast (und nicht etwa einen pro Zeichen), ist der Overhead für die Aufrufe auch nicht spürbar. Aber warum willst du für diese Aufgabe eine eigene Klasse anlegen? Wie wäre es mit einer Funktion?
Hatte ich unglücklich formuliert. Ich meinte nicht, daß Dateninhalt 'per Value' über den Stack läuft sondern schon Zeiger (Referenzen). Mag auch sein, daß auf GHz-strotzenden Rechnern, auch nach Abzug aller möglichen sonstigen Anwendungen, genug Power bleibt, um das locker zu bewältigen. Es ist eben bloß schlecht abschätzbar wenn man aus einem Gebiet kommt, wo man noch mit jedem Prozessorregister auf Du ist und kein Betriebssystem "zwischenfunkt" ;-) Extra Klasse deswegen, weil ich das funktional gern aufteilen würde in 3 "Module" #1. Datenquelle (Lesen/Formatieren aus Loggerdatei) #2. Senke_1 (Grafische Ausgabe) #3. Senke_2 (File-Ausgabe) d.h. #1. sollte wenigstens eine extra Datei sein, damit bin ich wohl auf eine Klasse festgenagelt. Da eine Klasse aber eher ein logisches Konstrukt zur Programmorganisation ist, dürfte das nicht zusätzlichen Overhead beim Funktionsaufruf erzeugen?!
Willst du primär - das Programm zur Datenextraktion realisieren oder - OOP lernen und das Programm als Lernbeispiel nehmen? Ist ersteres der Fall, würde ich das in C machen, was du ja schon kannst. Elegante Lösungen gibt's auch in C und doppelten Code kannst du da ebenfalls vermeiden. Geht es die eher darum OOP zu lernen, würde ich mir erst einmal ein einschlägiges Tutorial oder Lehrbuch reinziehen. Da werden oft Beispielprogramme beschrieben, die dem deinen nicht unähnlich sind. Muss es unbedingt C# sein (kenne mich selber darin überhaupt nicht aus)? In C++ gibt es bspw. auch die von dir gewünschten Inline-Methoden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.