Laden...
norman_timo
myCSharp.de - Member
170
Themen
4.506
Beiträge
Letzte Aktivität
vor 11 Jahren
Dabei seit
13.07.2004
Alter
46
Beruf
Dipl.-Ing. (BA) Informationstechnik
Herkunft
Wald-Michelbach (Odw)
Interessen
Familie, Computer und Schach
Blog
Erstellt vor 15 Jahren

Hallo zusammen,

interessantes Thema, das mir auch einmal untergekommen ist. Wir haben es damals ohne Anwalt "gewagt".

Folgendes halte ich für unproblematisch:
Daten in einem Format XY liegen auf der Platte. Du analysierst Die Datenstruktur auf Dateiebene und greifst dann auf die Daten zu (und machst irgendwelche Verarbeitungen damit). Sollte sich das Dateiformat irgendwann ändern, so wird Dein Programm plötzlich Probleme mit dem Auslesen haben. So weit, und unter der Annahme, dass die Daten selbst urheberrechtlich nicht angetastet sind, halte ich das für unproblematisch.

Problem ist, wenn Du Daten manipulativ verarbeitest und dann direkt in der Datei Änderungen vornimmst. Nicht weil die Daten damit verändert werden, weil sonst das Originalprogramm seine Garantie und Supportansprüche verlieren könnte. Wenn der Betreiber feststellt, dass Fremdsoftware an den Daten gespielt wurden...

Wir sind das Risiko eingegangen, dass Daten kaputt gehen können, das hat aber der Kunde gewusst und hat selbst so entschieden...

Grüße
Norman-Timo

Erstellt vor 15 Jahren

Hallo xforfun,

Es gibt Stellen, da arbeite ich mit Bildern auf der HDD.

So lange es nur lesend ist, dann kann man beim Öffnen darauf achten, dass es nur lesend geöffnet wird, da sollte es keine Schwierigkeiten geben.

Wenn es auch schreibend (bearbeitend) ist, dann sollte hier ein lock ausreichen, hier würde ich ein lock-Objekt nehmen, das den eindeutigen voll qualifizierten Dateinamen enthält, das ist eindeutig.

Oft ist Mutex zu hoch gegriffen, kann aber sein, dass es in Deinem Anwendungsfall Sinn macht, das kann ich so aus der Ferne nicht beurteilen.

Grüße
Norman-Timo

Erstellt vor 15 Jahren

Hallo zusammen,

wie meine Vorredner schon beschrieben, halte ich Schichtentrennung und Architekturdesign á la MVC etc auch für 2 paar Schuhe, die zunächst einmal nichts miteinander zu tun haben.

Meinem Verständnis nach sorgt die Schichtentrennung dafür, dass man die Applikation in mehrere Teile aufteilt, die man dann verteilen kann (z.b. auf mehrere Prozesse / Rechner). Sinnvollerweise macht man eine Schichtentrennung dort, wo es Aufgabentechnisch auch am leichtesten realisiert werden kann, also klassisch GUI, BL und DAL.
Man könnte es streng genommen aber auch anders aufteilen, z.B. so dass ein Fenster-Objekt von der GUI vom entfernten Server geholt werden muss (was unpraktisch aber nicht unmöglich ist).

Die Design-Patterns (MVC etc.) sorgen dafür, dass Software wartbarer gemacht wird. So wird die Applikation ganz genau nach Aufgaben aufgeteilt. Diese Aufteilung kann man dann im Schichtenmodell unterbringen muss man aber nicht.

Grüße
Norman-Timo

Erstellt vor 15 Jahren

Hallo zusammen,

die konkrete Frage, die sich mir stellt ist die: Welche Daten werden "zeitgleich" verändert.

Wenn es sich ausschließlich um Datenbank-Daten handelt, so kann man dort sehr einfach mittels Transaktionen und deren Levels eine Synchronisation erreichen ohne dass man großartig im Quellcode etwas berücksichtigen müsste (mal Fehlerbehandlung im Transaktionsfehlerfall abgesehen).

Wenn es sich um .NET Daten handelt (Werte im Speicher in Klassen/Strukturen), so wird man mittels "lock" schon einiges erreichen können. Ein Singleton ist in aller Regel nicht unbedingt vonnöten, kann aber verwendet werden. Wichtiger sind wohl die so genannten "Factories".

Geht es um Daten auf der Platte, dann sollte man sich wirklich Gedanken machen, ob man das nicht anders lösen kann. Das wäre dann extrem unangenehm und wahrscheinlich das komplexeste Szenario.

Grüße
Norman-Timo

Erstellt vor 15 Jahren

Hallo zusammen,

hab jetzt die Google Treffer nicht angeschaut, ob folgendes dabei war, aber ich finde folgendes absolut genial:

Codeproject - Command line argument parser

Ich habe lediglich den Quellcode so umgestellt, dass ein Dictionary (Generics) verwendet wird, und dass der Code in einer Methode ausgeführt wird anstatt im Konstruktor, ist aber Geschmackssache.

Grüße
Norman-Timo

Erstellt vor 15 Jahren

Hallo zusammen,

für mich gilt das gleiche wie jedes Jahr, ich nehme mir immer den gleichen Vorsatz vor:

Ich möchte immer dann mich ändern, wenn ich es für angebracht halte (also nicht auf einen speziellen Termin hin).

[also handhabe ich es wie einige Vorredner vor mir]

Grüße
Norman-Timo

Erstellt vor 15 Jahren

Hallo zusammen,

kleines_eichhoernchen hat schon die Möglichkeiten aufgezählt. Ich wollte nur folgende Informationsquelle hinzufügen:

Microsoft Support - Lesen von XML Streams

Grüße
Norman-Timo

Erstellt vor 15 Jahren

Hallo zusammen,

bevor nun das in einen Multithreading Krieg ausbricht folgende Aussagen:

Es ist richtig, dass ein Prozessor nur einen Thread bearbeiten kann.
Es ist also auch folgerichtig, dass gleichzeitig nur so viele Threads laufen können wie es Prozessoren gibt.
Es ist aber meiner Meinung nach überhaupt nicht gegeben, dass eine Anwendung langsamer läuft, wenn sie nicht genauso viele Threads wie CPU's verwendet (also mehr oder weniger). Das hängt ganz stark davon ab, was der Thread macht, in wie weit es atomare Operationen sind und ob Threads nicht sich selbst schlafen legen etc.

Wenn wir schon beim Besipiel Ping sind. Es ist durchaus denkbar (alles Theorie, also nicht nachgewiesen oder überprüft), dass ein Thread damit startet, den Ping abzusetzen, sich dann aber bis zu einer Antwort schlafen legt. Nehmen wir mal an, dass eine Ping-Antwort 30 ms dauert. Derweil kann ein Thread-Contextwechsel stattfinden und ein weiterer Ping abgesetz werden. Somit wäre die Theorie, dass Multi-Threading-Anwendungen, die mehr Threads als CPUs verwenden langsamer laufen widerlegt.

Also die Quintessenz ist hier: Multithreading ist ein sau-komplexes Thema, bei dem man nie pauschalisieren kann. Es hängt immer vom Anwendungsfall, von der Hardware und von der implementierten Logik ab.

@mrdjoker: Deshalb mag ich solche Berechnungen von Dauerangaben im Multithreading-Context überhaupt nicht. Einmal der Virenscanner zwischendrin (der in aller Regel eine höhere Priorität hat), und alle Berechnungen sind hinfällig.

So, nun war das Ausgangsthema aber Datenbanken, dachte ich zumindest.

Grüße
Norman-Timo

Erstellt vor 15 Jahren

Hallo LarsThorwald,

kann es sein, dass du die Pfadangabe im Debugger verfolgst? Der zeigt Dir nämlich alles "Escaped" an, d.h. ein "C:\Temp" würde er als "C:\Temp" darstellen.

Kann es also sein, dass Du überhaupt keine Ersetzung vornehmen musst?

Ein Path-Objekt enthält in aller Regel nur syntaktisch korrekte Pfade, da dürfte normalerweise ein "\" gar nicht vorhanden sein.

Grüße
Norman-Timo

Erstellt vor 15 Jahren

Hallo ErfinderDesRades,

klar kann man da was machen, man kann VS selbst debuggen (und somit den Designer). Siehe hier: Fail to create component / Not marked as serializable

Das ging zumindest mit VS2005, sollte aber meines Erachtens auch mit VS2008 gehen.

Mit dieser Vorgehensweise konnte ich bisher immer meine eigenen Controls debuggen, vom Drag-In aus der Toolbox inkl. zur Laufzeit.

Grüße
Norman-Timo