Laden...
T
telnet myCSharp.de - Member
Senior Software Engineer Dabei seit 14.05.2006 327 Beiträge
Benutzerbeschreibung

Forenbeiträge von telnet Ingesamt 327 Beiträge

19.01.2017 - 15:16 Uhr

Hallo zusammen,

ich stehe im Moment vor folgender Aufgabenstellung:

Ich habe eine Anwendung, in lokale Konfigurationsdateien als XML vorliegen (teilweise einfach serialisierte Objekte, teilweise auch "selbst erstelles" XML).

Jetzt soll bzw. muss für die Konfigurationdateien ein Mechanismus eingebaut werden, der nur bestimmten Usern Änderungen erlaubt. Der "normale" Anwender soll die Anwendung nur benutzen können, die "Poweruser" sollen die Konfiguration auch ändern dürfen.

Über Windows-Dateiberechtigungen würde ich das ganze nur ungern lösen, da die Anwendung sehr oft installiert werden soll und bei jeder Installation die Anwender verschieden sind -> wird schnell unübersichtlich.

Da es keine weiteren Abstufungen im Berechtigungssystem gibt bzw. geben muss (also nur einen Teil der Konfiguration ändern etc.) hätte ich die Idee gehabt, die Konfigdateien verschlüsselt abzuspeichern. Problem dabei ist, dass ich das so machen müsste, dass die Anwendung selbst beim Start die Konfiguration immer lesen kann, also quasi einen "Generalschlüssel" hat. Zum Speichern / Ändern der Konfiguration müsste der Anwender dann ein Kennwort haben...

Leider weiß ich nicht, nach welchen Schlagwörtern ich hierzu suchen könnte aber hat evtl. jmd. von euch schon mal vor einer ähnlichen Aufgabe gestanden oder hat Tipps?

Vielen Dank!

23.08.2016 - 15:41 Uhr

Hallo zusammen,

ich hab hier eine normale Windows-Anwendung (WinForms), die ein paar Konfigurationsdateien unterhalb von %ProgramData% liegen hat. Die Konfigdateien sind nicht anwenderspezifisch, die Konfig soll für jeden User, der den Rechner benutzt identisch sein.

==> Soweit kein Problem, wenn ich die Dateien gegen Veränderung sichern will - NTFS ReadOnly Rechte für User drauf und gut.

Jetzt kommt aber hinzu, dass bestimmte normale User die Konfiguration Ändern können sollen, andere wiederum nicht. NTFS-Rechte scheiden dann schon mal aus, weil man die sonst individuell pro Rechner konfigurieren müsste und außerdem z.T. Gruppenuser eingesetzt werden.

Was ich jetzt bräuchte ist ein Mechanismus, mit dem die Konfigdateien gesichert werden (also NTFS-mäßig zwar read/write-Rechte für User, aber dafür verschlüsselt), so dass die Anwendung die Dateien immer Lesen kann, aber dann nur nach korrekter Authentifizierung (per Passwort) wieder geschrieben werden können...

Gibt's da evtl. schon fertige Mechanismen für so was oder wie würdet ihr so was realisieren? Key / Passwort fest eincodieren ist jetzt eher nicht so mein Favorit, alles über AD machen / berechtigen würde in ziemlich hohen Verwaltungsaufwand ausarten.

Vielen Dank für eure Ideen schon Mal!

18.03.2016 - 18:34 Uhr

Hast du evtl. die DiscardNull-Eigenschaft des verwendeten SerialPort-Objekts auf true gesetzt?
(MSDN)

Grundsätzlich ist vielleicht auch zu sagen, dass man im Internet sehr oft Hinweise drauf findet, dass die Implementierung der SerialPort-Klasse nicht grade optimal ist. Mich hat's bisher zum Glück noch nicht betroffen...

21.01.2016 - 11:31 Uhr

verwendetes Datenbanksystem: MSSQL

Hallo zusammen,

wir führen aktuell eine Diskussion zum Thema wie man Daten am besten abspeichern sollte / könnte um Sie dann möglichst performant abrufen / anzeigen zu können.

Aktuelle Situation:
In einer DB Tabelle werden Kopfdaten gespeichert, wobei es zusätzlich eine Spalte mit XML-Daten gibt, die dynamische Daten beinhalten (das Quellsystem schickt eine pro Datensatz variierende Anzahl an Attribut- / Wertepaaren mit).
Eig. wäre das ein Fall für eine NoSql SB gewesen, hatten wir aber leicht nicht zur Verfügung.

Wir laden die Daten in eine Clientanwendung und lösen da das XML dann auf, generieren also dynamisch Objekte die dann alle vorkommenden Spalten beinhalten.

Gegenvorschlag aktuell:
Wir erstellen zur Kopfdatentabelle eine Erweiterungstabelle mit gleichem Schlüssel und einer 1:1 Beziehung. Die Erweiterungstabelle soll dynamisch erweitert werden / sich selbst aufbauen, d.h. wenn ein noch unbekanntes Attribut daherkommt soll einfach eine Spalte angefügt werden.

Grund für die aktuelle Diskussion ist die Performance der GUI Anwendung, die die Daten anzeigt. Meiner Meinung nach würde ich lieber Aufwand in die Optimierung des Ladens der Daten stecken als die DB so wie beschrieben umzubauen... Sicher geht dann das Abrufen der Daten wahrscheinlich schneller aber es widerstrebt mir einfach eine Tabelle dynamisch sich selbst verändern zu lassen aufgrund der Daten, die reinkommen.

Was denkt ihr da? Gibt's da sachliche / fachliche Argumente für so was oder ist das "Ansichtssache"?

VG

10.12.2015 - 20:37 Uhr

Hallo zusammen,

ich stehe aktuell vor der Aufgabe in einer SQL-Server Datenbank Daten aus einer weiteren Anwendung zu Auswertezwecken zur Verfügung zu stellen. Das reine Bereitstellen der Daten ist dabei ünerhaupt kein Problem.

Was ich aber bräuchte und mir noch fehlt ist ein möglichst einfach zu bedienenes Reportingtool, mit dem man auf Basis von SQL-Abfragen Reports erstellen kann (in tabellarischer und wenn mögich auch z.T. grafischer Form). Sachen wie die SQL Server Reporting Services sind für die Anwender dabei leider eher nicht geeignet.

Ich habe mir heute mal "Seal Reports" auf Github angesehen - sieht schon mal vielversprechend aus... Kennt jmd. von euch evtl. noch andere, ähnliche Tools ? (Auf Java-Basis gibts da ja einiges, aber aufgrund von div. Problemen mit Java Anwendungen und mangels geeignetem Webserver - die Tools sind ja oft auch webbasiert - habe ich mich eig. auf .Net als Runtime festgelegt)

Für Tipps in der Richtung wäre ich sehr dankbar!

25.11.2015 - 22:25 Uhr

Also wenn ich Webservices, die SAP direkt zur Verfügung stellt, in meine Anwendungen einbinde, dann läuft das so:

  • Unsere SAP Entwickler erstellen einen RFC Baustein und generien in SAP einen entsprechenden Endpoint
  • Ich kriege von den SAP Entwicklerm ein WSDL File, das die Definition des Webservices emthält (wird glaub ich aus einer Transaktion SOAMANAGER raus generiert aber ich hab mit SAP so leider nix am Hut 😉)
  • Das WSDL-File binde ich bei mir in Visual Studio ganz normal ein. Wichtig dabei ist, dass die Services wirklich SOAP Webservices und keine WCF Services sind (Deine config sieht mir nach WCF aus).

Wie's mit der Authentifizierung aussieht kann ich dir jetzt nicht sagen, das liegt dran ob ihr expliziten Login macht (Da kann der Username + PW via NetworkCredentials mitgegeben werden) oder irgendwas anderes (Denke da gibt's auch noch SAP Logon Tokens etc.)

Beim Aufruf der Webmethoden sind je nach Art der Parameter (Table, Import, Export, Changing) und der SAP Typen noch ein paar Sachen zu beachten (z.B. bzgl. Initialisierung von Strukturen vor dem Aufruf; Lustig wird's z.B. bei Date/Time Typen, da muss man die WSDL z.T. manuell anpassen bevor's funktioniert).

-> Wenn das ein wichtiges Projekt ist das drängt und du noch nie mit SAP Webservices gearbeitet hast wär's evtl. einfacher mit dem SAP .Net Connector 3.0 oder über ERPConnect direkt den RFC aufzurufen (Nachteil ist dann, dass der SAP GUI auf dem Client vorhanden sein muss bzw. die librfc32.dll + entprechende Einstellungen in ein paar Systemfiles).

Ein Tipp noch: Wenn der Webservice Aufruf mal grundaätzlich klappt aber z.B. auf SAP Seite nicht in die richtigen Typen konvertiert werden können ist die Transaktion SRT_UTIL eine gute Anlaufstelle.

Viel Erfolg (und Glück) 😉

02.06.2015 - 12:44 Uhr

Hallo Abt,

erst mal vielen Dank für die schnelle Antwort!

Dann war ich ja schon mal gar nicht so falsch dran.. Quartz.Net schaue ich mir dann mal genauer an.. die Pipelines habe ich mir auch schon angesehen, allerdings hätte ich nicht mehrere hintereinandergeschaltete Pipelines...

Ich habe ja keine mehrstufige Verarbeitung sondern nur einmal das Laden der Stammdaten, die dann nicht weiter verarbeitet werden, und das Laden der Bewegungsdaten in verschiedenen Intervallen, die dann wirklich verarbeitet werden.
Da die geladenen Bewegungsdaten dann aber auf die gleiche Art und Weise verarbeitet werden bräuchte ich nur eine BlockingCollection, in die alle Bewegungsdaten geschrieben werden und aus der Sie dann zur Verarbeitung "entnommen" würden.
Hab ich das so richtig verstanden?

02.06.2015 - 12:21 Uhr

Hallo zusammen,

ich habe hier folgende Problemstellung:
Ein Hintergrunddienst soll sich aus einer (angenommen beliebigen) Datenquelle Stammdaten holen, die zur weiteren Datenverarbeitung benötigt werden.
Die Sätze dieser Stammdaten haben eine Eigenschaft, die sie in unterschiedliche Kategorien einteilt, die die weitere zeitliche Verarbeitung regeln. Außerdem sollen die Stammdaten in einem definierten Intervall neu eingelesen werden, damit Änderungen automatisch übernommen und berücksichtigt werden.
Grob gesagt gibt es Datensätze, die alle 1, 2, 5 oder 10 Minuten verarbeitet werden sollen.

Ich wäre jetzt folgendermaßen vorgegangen:

  1. Zyklisch die Stammdaten in eine simple List<> einlesen
  2. So viele Timer erstellen, wie ich verschiedene Intervalle habe.
  3. Synchronisation der Stammdaten-List<> über ein Objekt, das ich per lock() während der Aktualisierung der Stammdaten sperre
  4. Beim Ablauf eines Verarbeitungstimers ziehe ich mit aus der Liste der Stammdatenobjekte eine Kopie, die nur die für den aktuellen Timer relevanten Elemente enthält.
  5. Die Timer sichere ich intern gegen "sich selbst überholen" ab.

Jetzt gibt es inzwischen aber ja schon neuere Möglichkeiten wie Tasks, Pipelines etc. mit denen ich aber noch nicht konkret gearbeitet habe.

Hat jemand evtl. eine Empfehlung für mich, wie ich so eine Aufgabe möglichst "sauber" realisieren könnte?
Hab mir auch schon Sachen wie Quartz.Net angesehen aber ich denke, dass das für meine Zwecke evtl. oversized ist...

21.08.2014 - 10:54 Uhr

verwendetes Datenbanksystem: MS SQL Server

Hallo zusammen,

ich beobachte hier bei mir aktuell folgendes Phänomen:
Wenn ich einen Anwendung aus VS heraus im Debug-Mode starte und eine einfache SQL Abfrage ausführe (Abfragen von Daten aus zwei Tabellen, die per Left Join verbunden sind), dann läuft die Abfrage relativ schnell durch.
Nehme ich aber das Ergebnis des Debug-Builds und starte die Anwendung ganz normal, dann habe ich auf einmal stark erhöhte Laufzeiten...

Kennt jemand einen Grund, warum sich eine Anwendung anders verhalten könnte, wenn Sie direkt aus VS heraus im Debug-Mode gestartet wurde?

14.01.2014 - 12:31 Uhr

Hallo,

mit dem Matlab Builder den vbprogger verlinkt hat, funktioniert das eigentlich ganz gut.

Meine Erfahrungen (mit einer Version von Matlab, die nicht mehr aktuell ist):

  1. Das Erzeugen der notwendigen DLL(s) aus Matlab heraus funktioniert von Handling her relativ einfach.
  2. Mit deiner Anwendung musst du normalerweise nicht das komplette Matlab deployen sondern nur eine Matlab-Runtime
  3. Anscheinend unterstützt der Matlab Builder nicht alle Funktionen / Befehle, die Matlab zu bieten hat. Musste damals einiges umstellen / ausmisten, da selber erstellte Routinen, die diese Befehle verwendet hatten, einfach nicht mit in die DLL integriert wurde... Wie das damals genau war weiß ich leider nicht mehr - nur, dass ich da eine Zeit lang Logfiles gewälzt hab 😉
  4. Die Datentypen, die in der .NET DLL dann rausgekommen sind, waren teilweise etwas suspekt 😄 vor allem bei Vektoren und Matritzen...

Viel Erfolg!

12.12.2013 - 18:05 Uhr

Also ich hab das mit der CLR Stored Procedure mal ausprobiert und zu meiner Überraschung war ich mit dieser Methode 3 langsamer als in der vorher erwähnten Methode 2. (43s vs. 33s bei ca. 25.000 Records mit 27 Spalten)

Jetzt habe ich dann noch eine Methode 4 realisiert:
Die Daten werden direkt als XML unverändert aus der DB in die Clientanwendung geladen (SqlReader) und die Daten per XDocument ausgelesen und in eine DataTable geschrieben, wobei die Attribute direkt als Spalten umgesetzt werden.
Damit bin ich jetzt bei ca. 2,6s für 25.000 Records a 27 Spalten.

Ich denke, dass die CLR SP wahrscheinlich schneller wäre, wenn der Code noch weiter optimiert würde (ist er nämlich im Test nicht gewesen).
Aber rein aufgrund des Geschwindigkeitsvergleichs und der Tatsache, dass ich keine zusätzliche DLL im SQL Server registrieren muss, werde ich schätzungsweise bei #4 bleiben und die Umsetzung der XML-Daten in das gewünschte Format im Client selbst realisieren. Was sich ganz gut trifft ist dabei, dass die Leute, die viele Daten laden, meist sehr leistungsfähige Rechner haben.

Danke auf jeden Fall für eure wertvollen Tipps!

10.12.2013 - 15:03 Uhr

Ok ich hatte gedacht vielleicht ist das direkte Auslesen schneller aber der direkte Verleich zeigt:

  • Methode 1: Dynamisches Query erstellen, bei dem jede Spalte durch einen XPath-Ausdruck definiert ist: 18s
  • Methode 2: Alle Key-Value Paare rausladen und dann mit einem dynamischen Query pivotieren: 4s

Das ganze bei 3200 Rows mit je 27 Spalten / Attributen im XML... ganz schöner Hammer der Unterschied...

Dann werd ich das mit der CLR SP nochmal probieren - da muss ich mich aber erst mal schlau machen - hab ich bisher noch nie gebraucht.

Vielen Dank an der Stelle schon mal für die wirklich hilfreichen Tipps!

10.12.2013 - 12:09 Uhr

Die Option NoSql habe ich leider nicht - ich bin an einen SQL Server gebunden..
Die Sache mit dem XML-Spaltentypen habe ich mir angesehen und Testweise implementiert...

In den XML Spalten steht jetzt z.B. folgendes XML drin


<PROP NAME="ATTRIB1" VALUE="Wert1" />
<PROP NAME="ATTRIB2" VALUE="2653" />
<PROP NAME="ATTRIB3" VALUE="Test0815" />

D.h. pro Eigenschaft habe ich ein Element, das einen Namen und einen Wert hat.
Speichern ist der Daten ist relativ easy, beim rausziehen im richtigen Format hab ich noch etwas Probleme:

Ich will im Endeffekt eine Tabelle bekommen, die die Werte der Attribute NAME als Spaltennamen hat:

ATTRIB1 ATTRIB2 ATTRIB3
Wert1 2653 Test0815

Was ich jetzt gemacht habe ist erst mal alle Werte des Property NAME über alle Einträge rauszusuchen (DISTINCT)...
Mit diesen Spaltennamen habe ich mir dann dynamisch ein Query zusammengebaut, das mir dann die Daten in genau der richtigen Form ausgibt - allerdings denke ich nicht, dass das eine wirklich performante Lösung ist - es wird ja dann für jede Spalte ein XPath Query auf die Daten ausgeführt...

Habt ihr da vielleicht noch einen Tipp oder ein Stichwort für mich, wie ich es möglichst Performant schaffe, die Daten aus einer Struktur wie oben so auszugeben, dass ich ein Attribut für die Spaltennamen und ein anderes für die Werte verwende?

06.12.2013 - 08:57 Uhr

verwendetes Datenbanksystem: SQL Server 2008

Hallo,

ich habe grade folgendes Problem: Ich designe eine Datenbank bzw. eine Applikation zur Anzeige der Daten, wobei ich mit "flexiblen" Datenstrukturen zu kämpfen habe.

Ich habe immer einen Basisdatensatz, zu dem es dann mehrere Attribute gibt, wobei ein Attribut immer ein paar aus Name und Wert ist. Da es nicht zu jedem Basisdatensatz das gleiche Set an Attributen gibt habe ich jetzt folgende DB-Struktur:
Basistabelle 1:n Zuordnungstabelle
Zuordnungstabelle 1 : n Attributname
Zuordnungstabelle 1 : n Attributwert

Sowohl die Namen kommen mehrfach vor als auch die Werte (sind teilweise vordefiniert).

Jetzt will ich die Daten aber in meiner Anwendung anzeigen lassen, wobei die Attribute zum Basisdatensatz aber einfach als zusätzliche Spalten angezeigt werden sollen. Dazu habe ich eine Stored Procedure geschrieben, die die Attribute transponiert und an die Datensätze aus der Basistabelle dranhängt. Die kann ich dann in mein Programm reinladen und direkt an ein DataGrid binden.

Das Problem ist jetzt, dass der ganze Vorgang relativ lange dauert, da ich teilweise 100000 Datensätze auf einmal lade.. bei 20 Attributen inkl. Werten dauert die ganze Sache mit dem Transponieren dann schon richtig lange.

Gibt es für so eine Problemstellung evtl. einen anderen Ansatz? Mir würde nur einfallen, statt der o.g. Struktur eine Datenbanktabelle dynamisch aufzubauen, d.h. die Attribute in einer eigenen Tabelle speichern, zu der nach Bedarf dynamisch Spalten hinzugefügt oder entfernt werden, und die dann einfach mit einer Beziehung
Basistabelle 1 : n Attributtabelle in der DB liegt.

Über Anregungen, wie man so was am besten designen kann / sollte, wäre ich sehr dankbar!

19.11.2013 - 14:31 Uhr

Hallo,

ein Problem mit der Tokengröße bei der Authentifizierung hatten wir auch mal, allerdings nicht in Zusammenhang mit dem IE / IIS sondern einer anderen Anwendung.
Benutzer mit mehr vielen Gruppen (meist die "wichtigen") konnten sich nicht mehr anmelden.

Abhilfe hat bei uns gebracht, die MaxTokenSize auf dem Server, an dem sich die Benutzer über die Anwendung anmelden wollten, hochzudrehen

Problems with Kerberos authentication when a user belongs to many groups

Ob dazu vorher an den DCs eine Änderung notwendig ist kann ich leider nicht sagen - hab damals den Regkey auf den Max-Wert gesetzt - Reboot - geht bis heute einwandfrei.

VG

07.04.2013 - 18:05 Uhr

Hallo,

Ich bin auf der Suche nach einer Bibliothek bzw. Komponente, mit der ich in einer Windows Forms Anwendung eine Art Zeichenbereich erstellen kann, auf die der Anwender dann per Drag and Drop Symbole ziehen kann... Eben ähnlich Micorosoft Visio..
Ich hab so was denke ich mal vor einiger Weile gesehen, nur leider kann ich mich an den Namen nicht mehr erinnern...

Hat jemand vielleicht einen Tipp für mich?
Vielen Dank!

13.03.2013 - 11:48 Uhr

Hallo,

ich habe hier auf einem Rechner einen ganz seltsamen Effekt:

Starte ich den Service unter dem Account LocalSystem, dann läuft alles normal. Starte ich ihn im Kontext eines Domainaccounts, dann kriege ich beim Starten einen Fehler 1053 (the service did not respond to the start or control request in a timely fashion) und der Service startet nicht.

Das Problem konnte ich schon eingrenzen:

  • An den Anmeldeinformationen des Domainaccounts liegts nicht, da die Meldung über eine fehlerhafte Anmeldung schon vor dem Fehler 1053 kommen würde.
  • An fehlenden referenzierten Bibliotheken liegt es auch nicht. Habe ein minimales Testprojekt erstellt, das ein leerer Windows Service mit einem Timer ist, der den akt. Zeitstempel in ein File schreibt
    => Wird der Service unter LocalSystem gestartet funktioniert alles wunderbar, wird er unter einem Domainaccount gestartet gibts einen Fehler 1053.

Hatte jemand evtl. schon mal so ein Problem? Oder weiß wer, wo ich am besten ansetzen könnte, um dem Fehler auf den Grund zu gehen?

Danke, Viele Grüße

16.02.2013 - 17:21 Uhr

Hallo zusammen,

ich bin im Moment auf der Suche nach einem Mobiltelefon, für das es ein vernünftiges SDK (C# geeignet 😉) zum Verschicken und Empfangen von SMS gibt.

Kriterien:

  • Möglichst günstig
  • Vernünftiger SDK

Ob das Teil ein Monochrondisplay hat oder schon in Farbe ist ist mir dabei relativ egal, ich will mit dem Teil so eine Art SMS-Gateway aufbauen...

Hab mit den Nokia Connectivity API angesehen, aber die ist uralt (2008)...

Hat jemand von euch so was schon mal gemacht? Bzw. kennt einer ein vernünftiges Gerät, das diesen Anforderungen entspricht?

Danke für eure Tipps!

12.06.2012 - 20:27 Uhr

Hallo,

das Stichwort ist schon mal sehr gut... danke!
An verschiedene Datenbanken hab ich auch schon gedacht, den Ansatz allerdings wieder verworfen, da ich aus einer GUI Anwendung heraus auf sämtliche Tabellensätze gleichzeitig zugreifen muss...

Wenn ich allerdings jetzt so drüber nachdenke, fallen mir doch einige Dinge ein, die dafür sprechen und keine wirklichen Probleme, die die dagegen sprechen... Danke für den Denkanstoß!

12.06.2012 - 19:06 Uhr

verwendetes Datenbanksystem: MS-SQL Server 2008

Hallo zusammen,

sorry für den vielleicht etwas unverständlichen Titel des Posts, aber hier mal eine Erklärung, was ich genau meine:

Ich habe mehrere Schnittstellen, die Daten in identischer Struktur liefern. Die Datenstruktur sieht so aus, es eine "Mastertabelle" M gibt, in der Basisinformationen enthalten sind. Dann gibts noch einige Tabellen, wo z.B. die Quelle Q des Datensatzes und das Ziel Z definiert ist. Diese Tabellen stehen in einer M : Q bzw M : Z = n : 1 Beziehung, d.h. Q und Z sind immer eindeutig und M referenziert auf diese Sätze.
Außerdem gibts dann noch Eigenschaften eines Mastersatzes, wobei nicht jeder Mastersatz die gleichen Eigenschaften hat. Daher gibt es eine Tabelle EN mit den Namen der Eigenschaften und EW mit den Werten der Eigenschaften. Diese Tabellen stehen mit der Mastertabelle über eine zwischengeschaltete Beziehungstabelle in Verbindung.

Jetzt würde ich gerne in der Datenbank unterscheiden, wo die Daten herkommen bzw. die Daten wirklich trennen. I.d.R. würde man ja einfach ein Feld im Masterdatensatz einfügen, und jeder Schnittstelle einen Wert zuweisen. Allerdings kommen über die Schnittstellen sehr viele Daten mit sehr vielen Eigenschaften (Verhältnis Master : Eigenschaft ca. 1 : 60), wodurch die Zuordnungstabelle entsprechend schnell groß wird, was komplexe Abfragen auf die Daten ziemlich verlangsamt. Außerdem muss ich die Daten regelmäßig archivieren, und evtl. unterschiedlich lange aufbewahren.

Wäre es in einem solchen Fall denkbar, mehrere "Tabellensätze" mit identischer Struktur in z.B. unterschiedlichen Schemen (oder gar Datenbanken?) anzulegen, und jede Datenquelle auf einen eigenen Tabellensatz schreiben zu lassen? Oder wenn nicht im gleichen Schema dann die Tabellensätze z.B. einem Prefix im Namen zu unterscheiden?

Gefühlsmäßig ist die Lösung mit Tabellensätzen nicht wirklich schön, aber im Prototypen funktioniert sie soweit sehr gut und ist durch die Trennung der Daten auch schön performant... Gibt's da irgendwelche Designregeln, die mir so was verbieten oder wie würdet ihr so was lösen?

Für Anregungen wäre ich euch sehr dankbar!

18.04.2012 - 08:12 Uhr

Hallo,

ich bin auf der Suche nach Komponenten, mit denen ich folgendes machen kann:

Ich will ähnlich wie in Visio Shapes zeichnen und positionieren können, wobei ein Shape aber keine besondere Grafik sein muss sondern einfach ein "Block" sein kann.

Auf den Blöcken sollen dann Ein- und Ausgänge definiert sein. Über die GUI sollen dann Verbindungen zwischen den Blöcken hergestellt werden.

Als bestes Beispiel fällt mir der DataSet-Designer aus Visual Studio ein:
Zwei Tabellen erstellen, per Drag&Drop eine Beziehung aufziehen - fertig.

Kennt jemand vielleicht so was in der Art? (Am besten kostenlos)...

Vielen Dank für eure Tipps!

14.02.2012 - 07:09 Uhr

Werte an Queries übergebe ich sowieso grundsätzlich nur über Parameter...
Mit T4 habe ich mich bisher noch nicht beschäftigt. Sieht aber interessant aus... Vielen Dank für den Tipp!

13.02.2012 - 16:56 Uhr

Hallo,

keine Angst, meine TableAdapter werden schon richtig eingesetzt ... (sind durchaus sofern sinnvoll erweitert) 😉

Warum nicht den SqlText dynamisch erzeugen? Weil FxCop was anderes sagt 😉 Scherz beiseite... Sql dynmaisch zu erzeugen ist selbstverständlich eine Lösung - für mich hat sich aber die Frage gestellt, ob man so was nicht irgendwie anders machen könnte...

Das mit den SP's steht leider erst mal nicht zur Debatte. Die sind an anderer Stelle u.a. aus Performancegründen vorgegeben. Sofern möglich sollte dann auch eine Mischung aus SP's und "normalen" Abfragen vermieden werden...

13.02.2012 - 16:19 Uhr

Hallo,

ich habe hier eine SQL Server 2008-Datenbank, in der sich einige Tabellen mit relativ vielen Spalten befinden. Aus diesem Tabellen möchte ich Datensätze selektieren, wobei bestimmte Kriterien immer angegeben werden müssen (z.B. Start- und Ende-Zeitstempel). Der Rest der Spalten (alles unterschiedliche Datentypen, von nvarchar bis bit...) soll optional mit Kriterien versehen werden können.

Habe ich z.B. eine Spalte Message, dann kann der Anwender dafür ein Selektionskriterium eingeben, muss aber nicht.

Ich verwende in meiner Anwendung typisierte DataSets und für die Abfragen StoredProcedures. Wie kriege ich es denn am besten hin, mit solchen optionalen Parametern zu arbeiten? Dadurch dass die Parameter optional sind, kriege ich ja eine riesen Anzahl an möglichen Parameterkombinationen zusammen.. Für jede Kombination eine Procedure zu erstellen kann ja nicht die Lösung sein, oder? Wie löst man so was denn elegant?

VG

26.01.2012 - 22:52 Uhr

Hallo,

ich habe bei mir grade folgende Problemstellung:

Angenommen eine Anwendung (Service) benötigt zum Zugriff auf ein System, das keine integrierte Windowsauthentifizierung unterstützt, Zugangsdaten. Diese müssen dem Service in irgendeiner Form bereitgestellt werden.

Den Ansatz, die Zugangsdaten mit einem eincodierten Passwort zu verschlüsseln, habe ich verworfen, da es ja Tools wie .Net Reflector oder ILSpy gibt, die trotz Obfuscator einige ungewollte Daten ans Licht bringen können.

Nächster Ansatz wäre es jetzt, die Daten mit der Klasse ProtectedData zu verschlüsseln. D.h. string in byte[] konvertieren, durch die Protect()-Methode jagen und lokal ablegen. Damit wären die verschlüsselten Daten nur an dem einen Rechner wieder entschlüsselbar und auch nur dann, wenn man einen zusätzlichen byte[] (optionalEntropy), der dann fest hinterlegt würde, kennt.

Kennt jemand Gründe, die gegen eine solche Umsetzung sprechen (Risiken, die ich nicht bedacht habe...)? Oder hat vielleicht jemand andere / bessere Ideen? Ich bin ja sicher nicht der erste, der vor diesem Problem steht 😉

Über Anregungen wäre ich sehr dankbar!

P.S.: Mit der Crypto API von Windows habe ich schon gespielt, allerdings ist mir das ganze Handling zu umständlich (Außer es kennt jemand einen Wrapper für die Crypto API, der es einfach erlaubt Keys in einem Store zu speichern und wieder abzurufen - so was konnte ich bisher leider nicht in funktionsfähiger Form finden). CNG fällt auch flach, weil das ganze unter Windows XP auch noch laufen muss...

23.11.2011 - 21:43 Uhr

Hab zwar danach gegoolet aber auch nichts in der Richtung gefunden... wenn ihr das jetzt auch noch sagt, dann lass ich das Suchen bleiben 😉

Dann eben doch eine SP per Tabelle oder MicroORM - da kommt's dann jetzt auf die Performance an....

Danke für eure Hilfe!

23.11.2011 - 17:20 Uhr

Ok danke erst mal für die interessanten Antworten...

Die Sache mit den Micro-ORM hört sich schon mal gut an - das seh ich mir auf jeden Fall an...

Untypisiertes Dataset steht leider nicht zur Debatte...

Eine auf Stored Procedures basierte Lösung zu verwenden wär mir aus Performancegründen eigentlich am liebsten, da die Tabellen relativ schnell mit vielen Daten befüllt werden und ich die I/O so gering wie möglich halten möchte/muss...
Bei den Inserts müssen außerdem noch Einträge in in Beziehung stehenden Tabellen erzeugt werden...

Da müsste ich ja wenn ich keine SPs verwende erst einen Aufruf zum Insert des eigentlichen Datensatzes machen und auf Basis der autogenerierten ID dann n zusätzliche Datensätze in der Zuordnungstabelle erzeugen... Das führt dann zu 1+n Inserts... In einer SP könnte ich das alles direkt nacheinander abwickeln....

Gibt's eine Möglichkeit außer über sp_execsql den Tabellennamen erst beim Aufruf einer SP festzulegen? Oder bliebe als letzter Ausweg (falls das mit dem Micro-ORM nichts ist) nur noch eine SP pro Tabelle anzulegen?

23.11.2011 - 10:11 Uhr

Hallo,

ich stehe grade vor folgendem Problem:

In einer MS SQL Server Datenbank existieren mehrere Tabellen, die exakt die gleiche Struktur haben und sich nur im Namen unterscheiden (ja, das muss leider so sein 😉).

Wie setze ich den Zugriff auf diese Tabellen am besten um? Ich könnte mir im Programmcode natürlich die entsprechenden Statements dynamisch zusammenbauen und absetzen (per SqlCommand etc.), allerdings benötige ich typisierten Zugriff auf die Datenelemente.

  1. Gedanke: Stored Procedure mit Tabellennamen als Parameter, SqlString zusammenbauen und mit sp_execsql ausführen. In meiner Anwendung habe ich das ganze dann als generische typisierte Tabelle.

  2. Gedanke: Evtl. typ. DataSet und TableAdapter verwenden, allerdings fällt mir da jetzt nichts ein, wie ich den Tabellennamen in den Adaptern ändern könnte...

  3. Gedanke: Gibts da evtl. Möglichkeiten mit Linq2Sql?

Hat jemand Ideen oder einen Denkanstoß für mich?

18.11.2011 - 06:58 Uhr

An so was in der Richtung hatte ich auch schon gedacht. Das Problem ist: Wie erkenne ich automatisch die Formatstrings, wenn ich sie nicht vordefinieren kann und will, weil sie sich ständig ändern können bzw. nicht meiner Kontrolle unterliegen? Die zu speichernden Nachrichten kommen aus einem Drittsystem und werden nicht vom Anwender des Programms verwaltet....

17.11.2011 - 08:18 Uhr

Hallo,

ich stehe aktuell vor der Aufgabe, dass eine Anwendung eine große Anzahl an Zeichenketten bekommen und diese möglichst platzsparend abspeichern soll.

Die Anwendung selbst ist ein einfacher Windows-Service, die Daten werden in einer SQL-Server Datenbank gespeichert.

Die Zeichenketten, die beim Service eintreffen, können n unterschiedlichen Mustern folgen, z.B.:

Nachricht: XXX: 21
Systemnachricht: 16
...

Viele Nachrichten sind dabei gleich aufgebaut, d.h. Sie haben feste Bestandsteile in einer festen Reihenfolge, wobei zwischen die festen auch variable Bestandsteile eingestreut sind.

Was ich jetzt gerne erreichen würde wäre, die variablen Bestandteile zu erkennen. Damit könnte ich den "festen Teil" in einer Tabelle als Template speichern und in der eigentlichen Eingangstabelle würde dann nur das Template referenziert + die variablen Werte abgelegt.

Gibt es hierfür so was wie ein "Entwurfsmuster" oder eine allgemeine herangehensweise? Hat jemand evtl. einen Ansatz, wie man da am geschicktesten rangeht? Danke!

08.11.2011 - 13:53 Uhr

Hallo,

ich habe hier ein einfaches DataSet, in dem mehrere DataTables miteinander in Beziehung stehen.
Die Beziehungen habe ich auf "Nested" gestellt, damit sie im XML auch gute lesbar hierarchisch geschachtelt dargestellt werden.

Was ich bishier noch nie hatte und mir auch nicht erklären kann ist folgendes:

<Node Node_Id="0">
    <Element1>0000</Element1>
    <Element2>0010</Element>
    <SubNode SubNode_Id="0" Node_Id="0" />
    <SubNode SubNode_Id="1" Node_Id="0" />
...

Ist jetzt ein vereinfachtes Beispiel, aber jeder Knoten enthält auf einmal automatisch generierte Attribute "..._Id", die die Hierarchie der Records wiederspiegeln.

Das ganze passiert in einem Projekt, das ich von .NET 2.0 auf 4.0 portiert habe. Leider kann das Zielsystem, das diese Daten liest, die zusätzlichen Attribute nicht verarbeiten.

Weiß jemand, wie man dieses "Feature" unterbindet? Ist wahrscheinlich nur ein Parameter, konnte ihn aber leider nicht finden...

Vielen Dank!

10.08.2011 - 07:13 Uhr

Die Firma, bei der ich meine Bachelorarbeit geschrieben habe, hat das so gehandhabt, dass die Rechtsabteilung einen Geheimhaltungsvertrag mit der Hochschule geschlossen hat, den der Präsident und auch der betreuuende Professor unterzeichnen musste. Außerdem kan ein Sperrvermerk rein.

Bei so was ist natürlich immer die Frage, ob der Sourcecode das kritische Element ist oder die Daten, die damit verarbeitet werden. In meinem Fall waren es die Daten --> Als Beispiele wurden nur Dummy-Daten mit- bzw. angegeben, schon war alles kein so großes Problem mehr.

Ich kenne aber auch andere Beispiele, wo die Firma eine Geheimhaltungsvereinbarung wollte, die Hochschule das aber abgelehnt hat -> Der Student konnte seine Arbeit nicht bei dem Unternehmen schreiben...

05.08.2011 - 23:23 Uhr

Leider haben die gegen (fast) alles was... Wenn man was installieren muss -> ganz schlecht, wenn's einen eigenen Prozess startet -> noch schlechter...

Problem bei der Sache ist einfach, dass wenn an den Appl.Servern was fehlt als erstes mal vom Hersteller die Frage kommt "Was haben Sie denn da selber drauf installiert?"

Naja... da zerbreche ich mir dann am Montag wieder den Kopf drüber... das mit der MSMQ werd ich mir ansehen - denke aber nicht, dass das standardmäßig aktiviert ist... Gibt's denn da so was wie ne "Größenbeschränkung" einer Queue ?

05.08.2011 - 10:47 Uhr

Würde ich auch wirklich gerne, nur sehen das die Betreuer unserer PLS-Systeme nicht so gern auf ihrenen Leitsystemrechnern. Aus welchen Gründen auch immer haben die lieber reine ASCII-Files oder direkte Binärfiles (keine Ahnung, wer die so schlecht erzogen hat 😉).

05.08.2011 - 08:14 Uhr

Hallo @all,

ich beschäftige mich im Moment damit, einen Datenübertragungsdienst zu erstellen.
Dieser bekommt auf der Eingangsseite einen mehr oder weniger kontinuierlichen Datenstrom, den ich nach ein bisschen Verarbeitungslogik an ein anderes System übergebe.

Jetzt soll der Eingangsdatenstrom gepuffert werden für den Fall, dass das System auf der Ausgangsseite nicht verfügbar ist (wenn die Daten einmal eingegangen sind, bekommt sie die Anwendung kein zweites Mal). Soweit eigentlich kein Problem. Nur sollen die Daten auch dann noch verfügbar sein für den Fall, dass das Ausgangssystem nicht verfügbar ist und zwischendurch der Dienst neu gestartet wird --> Die Daten müssen irgendwie auf der HDD gespeichert werden.

Die Frage ist jetzt, wie man so was am besten umsetzt? Eine Idee wäre es erst einmal gewesen, dass der Eingangsteil der Anwendung die Daten immer in ein File schreibt und der Ausgangsteil der Anwendung die Daten dann immer aus dem File liest und nach erfolgreicher Übergabe an das Zielsystem aus der Datei entfernt. Wäre so was in diese Richtung sinnvoll? Welche Art des Datenzugriffs wäre dann zu bevorzugen?

Zwischendurch hätte ich auch schon an SQL-Server Compact gedacht (verwende ich in einer anderen Anwendung schon sehr erfolgreich für einen ähnlichen Zweck), allerdings kann der aus mehreren Gründen auf dem Server, wo die Anwendung laufen soll, nicht installiert werden.

Über Anregungen ung Tipps wäre ich euch sehr dankbar!

23.04.2011 - 10:17 Uhr

Eine .jar-Datei ist ein Java-Archiv und keine ausführbare Datei.
Was du machen könntest ist mal versuchen die Anwendung folgendermaßen zu starten:


<Pfad zur JRE>\bin\java.exe -jar <Pfad zur .jar Datei>

18.04.2011 - 13:55 Uhr

Hallo,

ich versuche jetzt schon seit mehreren Stunden folgendes zu erreichen:

Ich habe in einem Entity Model (zugehörige DB ist eine SQL Server 2008 DB) eine Tabelle definiert. Diese Tabelle hat als Primärschüssel eine autogenerierte Identity, einen DateTime-Zeitstempel und einen Wert.

Die Daten, die in die Tabelle sollen, stammen aus einem Drittsystem, das mir bei manchen Abfragen den Wert zu einem Zeitstempel nochmal liefert. In diesem Fall soll der Wert in der Tabelle geupdated werden.

Da es sich wie gesagt um sehr viele Datensätze handelt, wollte ich die Entscheidung Update / Insert gerne dem SQL-Server überlassen.
Der erste Versuch, das ganze über einen INSTEAD OF INSERT Trigger zu machen ist aber daran gescheitert, dass ich OptimisticConcurrencyExceptions bekommen habe, da die Abfragen in Triggern in einem anderen Kontext ablaufen und meine Anwendung die Anzahl an veränderten Records nicht mitbekommt.

Also habe ich mir eine Stored Procedure gebaut und diese als Insert Command für die Tabelle gemappt. Funktioniert soweit auch ganz gut, ABER:

Wenn ich .SaveChanges() ausführe und ein Objekt mit dem gleichen Zeitstempel zu speichern ist, dann wird die Stored Procedure aufgerufen. In der Stored Procedure aktualisiere ich die Daten und liefere den Schlüssel des aktualisierten Datensatzes zurück. Das führt aber dann dazu, dass ich eine Exception bekomme:

Fehlermeldung:
The changes to the database were committed successfully, but an error occurred while updating the object context. The ObjectContext might be in an inconsistent state. Inner exception message: AcceptChanges cannot continue because the object's key values conflict with another object in the ObjectStateManager. Make sure that the key values are unique before calling AcceptChanges.

Meine Vermutung ist, dass da irgendwie noch geprüft wird, ob der zurückgebene Wert des Schlüssels bereits existiert... Nach langem Bemühen von Google & Co gehen mir aber die Ideen aus...

Bin ich mit meiner Lösung denn überhaupt auf dem richtigen Weg ? Gibt's im EF denn eine Möglichkeit, so was mit einer Stored Procedure abzubilden ?
Oder vielleicht hat ja jemand eine Idee, wie ich es schaffe, dass mein Modell den Rückgabewert der Stored Procedure einfach "akzeptiert" ?

Vielen Dank schon mal für alle Hinweise !

06.04.2011 - 23:10 Uhr

Hallo,

ich hab's jetzt so gelöst, dass ich das typisierte DataSet als normales, untypisiertes DataSet serialisiere und die Daten als string an den Client übergebe.
Der deserialisiert den string dann in ein untypisiertes DataSet, was vollkommen ausreichend ist, da der Client die typisierte Version erst gar nicht zu kennen braucht.

Aus irgendeinem Grund habe ich von meinem WCF-Service (self-hosted) mit einem DataSet einen Fehler bekommen... Evtl. lags dran, dass nicht alle Tabellen Einträge hatten bzw. Null-Werte vorgekommen sind ? Kann das Problem leider aktuell nicht mehr nachstellen, da ich dann gleich den Ansatz von oben verfolgt habe.

Direkt mit XML wollte ich eben nicht arbeiten.. jetzt funkionierts aber.. Danke für die Tipps!

05.04.2011 - 16:14 Uhr

Hallo,

ich bin grade dabei einen WCF-Service zu erstellen, der eine DataSet-ähnliche Datenstruktur zurückliefern soll. Ziel der ganzen Sache ist es, so flexibel wie möglich zu bleiben. Ändert sich die Rückgabestruktur am Server, soll der Client das automatisch abfangen.

Konkret geht es darum, die Daten zweier in Beziehung stehender Tabellen über den WCF-Service an den Client zu übergeben, der die Tabellen dann anzeigt. Wenn ich auf Service-Seite jetzt ein Feld hinzufüge, soll der Aufruf des Services trotzdem noch funktionieren, es soll lediglich das eine Feld zusätzlich angezeigt werden.

Erster Versuch war jetzt, ein DataSet als Returntype zu verwenden, was weder schön ist noch funktioniert 😉

Gibt's denn eine allgemeine Empfehlung, wie man so was am besten realisiert?
Feste Klassen als Datenstrukturen zu verwenden kommt ja leider nicht in Frage, da diese dann starr wären... Evtl. als XML-Dokument?

27.02.2011 - 09:40 Uhr

Also ein Bild, also eine Binärdatei, als Text einzulesen ist meiner Meinung nach keine sehr gute Idee. In deinem Fall würde ich darauf tippen, dass im Bitstrom des Bildes irgendwo ein Begrenzungszeichen enthalten ist, das dem StreamReader sagt, dass die Datei zu Ende ist.

Ich würde das Bild erst mal mit

File.ReadAllBytes()

in einen byte[] einlesen. Diesen kannst du dann mit der GetString-Methode der Klasse

System.Text.ASCIIEncoding

in einen string verwandeln. Für den umgekehrten Weg gibt's dann GetBytes...

Warum willst du überhaupt eine Bilddatei in einer INI speichern?

01.02.2011 - 07:18 Uhr

Welchen Fehler gibt der Service denn genau zurück? Der HTTP 400 kann ja erst mal alles sein... Aber aus deinen Aussagen schließe ich mal, dass die Begrenzung der Zeichen schon der Grund sein sollte....

Soweit ich das sehe erstellst du zwar ein Binding, nutzt es aber nicht... Versuchs mal mit


<endpoint address="" binding="basicHttpBinding" contract="MyApp.Interfaces.Services.IAppointmentService" bindingConfiguration="MyBinding" />

Ausserdem vermisse ich hier noch den "bindingNamespace"...

Abhängig davon, ob du Daten senden und empfangen willst gäbe es da auch noch Einstellmöglichkeiten unter dem "binding", nämlich "readerQuotas"....

31.12.2010 - 10:13 Uhr

Versuch doch mal den Usernamen ("admin" als Standard) und Passwort (leer) im Connectionstring mitzugeben.
Beispiel findest du hier: Connectionstrings

10.11.2010 - 17:36 Uhr

Versuch's doch mal hiermit: XmlAttributeAttribute

Edit: Hab überlesen, dass das was du serialisieren willst nicht alles selbst definierte Typen sind... das Attribut aus dem Link trifft dafür nicht zu...

21.10.2010 - 12:17 Uhr

Hallo,

ich stehe hier vor folgender Frage, die mich heute schon den ganzen Vormittag beschäftigt:

Ich habe eine Anwendung, die normalerweise nur als NotifyIcon läuft. Sie reagiert auf Daten, die vom COM-Port kommen und löst je nach eingehenden Daten eine Benachrichtigung aus, die in einem eigenen Form angezeigt werden soll.

COM-Port Daten und darauf reagieren funktioniert alles, das anzeigen der Benachrichtungsform eigentlich auch. Die Benachrichtung wird angezeigt, wenn das Hauptfenster der Anwendung im Vordergrund ist... Ist das Hauptfenster aber im Hintergrund, dann wird das Benachrichtungsfenster, das mit Form.Show() erzeugt wird, nicht angezeigt.

Was funktioniert ist, dass ich nach de, Form.Show() ein Form.Activate() ausführe, dann wird auch bei minimiertem Hauptfenster die Benachrichtigung richtig angezeigt. Das Problem ist aber, dass ich damit der grade aktiven Anwendung den Focus klaue, was eher nicht so toll ist...

Hat jemand einen Tipp, wie ich das Benachtichtungsfenster anzeigen lassen kann, ohne der aktiven Anwendung den Fokus zu entziehen?

15.10.2010 - 18:51 Uhr

Wenn du einen Admin-Account für den anderen Rechner hast, dann verwende doch Pskill aus den PsTools von Microsoft... da kannst du den Prozessnamen, den Zielrechner und den Account, der die Rechte zum Beenden des Prozesses hast, mitgeben.

Hat bei mir noch immer funktioniert...

17.09.2010 - 21:16 Uhr

Guten Abend,

verwende am besten eine BindingSource, um deine DataTable an das DataGridView zu binden.
Wenn du dann auf eine selektierte Zeile (DataGridView.SelectedRows_) zugreifst kannst du das .DataBoundItem in ein DataRowView casten. Von dem kommst du dann über die .Row Property auf den eigentlichen Record der DataTable zugreifen.

Also etwa so (ohne Garantie - nur mal so schnell aus dem Kopf):


DataRow firstSelectedDataRow = ((DataRowView)dataGridView.SelectedRows[0].DataBoundItem).Row;

Die DataRow kannst du dann evtl. noch auf deinen streng typisierten DataRow-Typ casten...

03.09.2010 - 18:59 Uhr

Also wenn du keine Office-DLLs einbinden willst, dann bleibt dir eigentlich nur übrig, das File binär zu öffnen. Hierzu würdest du dann die Spezifikation der Binärdateien brauchen, die du unter http://www.microsoft.com/interop/docs/officebinaryformats.mspx einsehen und downloaden kannst. Der Weg ist wahrscheinlich aber mehr als beschwerlich...

Könntest du das File nicht in einem anderen Format wie evtl. .docx bekommen? Da würde dann XML zugrunde liegen, was das Handling wesentlich vereinfachen würde. Ausserdem gibt's da schon einige Komponenten wie http://docx.codeplex.com/...

30.07.2010 - 21:29 Uhr

Ich hätte vielleicht dazuschreiben sollen, dass ich die Fourier-Transformation gemeint habe....

30.07.2010 - 21:00 Uhr

Wenn du die Daten transformierst, filterst und danach wieder zurücktransformierst bekommst du aber doch auch wieder die gleiche Anzahl Datenpunkte, nur das "Gezappel" des Graphen wird geringer, oder?

Ich persönlich habe bisher immer nur die Komponenten von DevExpress eingesetzt.. bin vor allem mit dem Support sehr zufrieden (wirkliche Bugs werden i.d.R. in weniger als einer Woche gefixt) und die Performance ist größtenteils auch wirklich gut.

30.07.2010 - 19:48 Uhr

Hallo,

ich hatte mal ein ähnliches Problem, siehe Algorithmus zur Datenaufbereitung für Diagrammdarstellung

In der Zwischenzeit habe ich eine zugekaufte Charting-Komponente verwendet, die bis zu 1 Million Datenpunkte relativ problemlos anzeigen kann.

Inzwischen habe ich aber mit Hilfe eines Mathematikers etwas gefunden, das sich "Swinging Door Algorithmus" (einfach Googlen) nennt, der perfekt für genau diesen Zweck funktioniert (Ist eigentlich eine Methode zur Datenkompression)

--> Reduktion von ca. 50000 Datenpunkten auf 3000 ohne ein einziges Pixel Unterschied auf der Grafik. Mit den Parametern muss man je nach Art der Daten dann etwas spielen... Wahrscheinlich kann man noch etwas weiter runtergehen und dennoch einen sehr guten Verlauf erzielen...