Forum: PC-Programmierung Suche Umstiegstip von C -> C#/OOP


von Frank (Gast)


Lesenswert?

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

von der mechatroniker (Gast)


Lesenswert?

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?

von Frank (Gast)


Lesenswert?

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?!

von yalu (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.