mikrocontroller.net

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


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?!

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.