Siehe meinen letzten Kommentar. - Alles was du in meinem Beitrag nicht findest, findest du durch Verwendung der Suchfunktion.
Die Schleife im 2. Codebeispiel dient nur dazu, die Werte der Textboxen in eine geeignete Struktur zu bringen um diese im DataLayer den Command.Parametern zuzuordnen.
Ein fertiges Tool fällt mir dafür nicht ein, jedoch wäre es (zumindest für dein oben gezeigtes Beispiel) nicht viel Magie.
Artikel-Knoten ermitteln
Alle Unterknoten durchgehen
Attribute der Unterknoten zu Attributen vom Artikelknoten hinzufügen
Unterknoten entfernen
Speichern
Okay, vielen Dank.
Merkt man mir wohl an, dass ich nur noch C++ und Java programmiere, bei ersterem kann man es genau steuern, bei Zweiterem ist die Referenz auf ein int ja garnicht möglich.
Pardasus schrieb:
So,
ich habe nun geGoogelt was das zeug hält
Dir ist schon klar dass dir das niemand glaubt, da gibt es unzählige, idiotensichere Beispiele dafür. Entweder weißt du nicht wonach du googlen sollst oder du verstehst das "Ergoogelte" nicht. Ich weiß nicht was schlimmer ist...
Du musst einfach eine Klasse schreiben, die von TextWriter erbt und dessen Interface implementiert. Dazu muss lediglich die Funktion Write(char) implementiert werden. Dazu hat die Klasse eine Liste mit TextWritern, in die die Daten umgeleitet werden sollen. In der Funktion rufst du dann Write(char) der TextWriter in der Liste auf und schon wird in mehrere TextWriter geschrieben.
Lässt sich in 2 Minuten implementieren...oder willst du etwa gespoonfeeded werden?
Benutzung wäre dann zB so:
static void Main(string[] args)
{
var combined = new CombinedWriter();
var writer1 = new StringWriter();
var writer2 = new StringWriter();
combined.Add(writer1);
combined.Add(writer2);
Console.SetOut(combined);
Console.Write("asd");
var s1 = writer1.ToString(); //"asd"
var s2 = writer2.ToString(); //"asd"
}
Falls du keinen Proxy verwendest, schreib mal in die Main
WebRequest.DefaultWebProxy = null;
Sonst sucht .Net nach dem Standardproxy, auch wenn es gar keinen gibt. Mit der Zeile zusätzlich gehen WebRequests normalerweise so flott, wie man es erwarten würde.
Ich vermute mal man kann log4net an Trace dranknoten - in dem Fall würde ein Trace.Write reichen.
Ansonsten kann man sich einen log4net Logger sicher auch über irgend ein Singleton holen.
@suchenmachtschlau
Die Formulierung "wird nur 1x geladen" ist zwar ungenau, beschreibt aber das Wesentliche ganz gut. Was der Begriff "DLL-Konflikt" damit zu tun haben soll verstehe ich nicht ganz. Wenn man voraussetzt dass DLL Files mit identischem Namen in unterschiedlichen Verzeichnissen auf jeden Fall unterschiedliche DLLs sind (auch wenn ihr Inhalt gleich sein sollte), dann machen eventuelle "DLL-Konflikte" da keinen Unterschied. Also bezüglich der Frage wie oft eine DLL geladen wird.
@Peter_Mueller
Das OS kann Files von der Disk in den Speicher von Prozessen einblenden. Das nennt man Memory Mapping bzw. Memory Mapped Files.
Dabei ist das OS schlau genug das File nur 1x zu laden, auch wenn es von mehreren Prozessen (u.U. sogar an verschiedenen Adressen) eingeblendet wird. Bzw. sogar noch eine Stufe schlauer: es werden nur die Bereiche des Files geladen auf die irgendwann mal zugegriffen wurde.
Bei DLLs wird eine spezielle Variante dieser Technik verwendet, wobei die in dieProzesse eingeblendeten Abbilder der DLL so markiert werden, dass bei Änderungen in diesen Speicherbereichen automatisch eine priavte Kopie für diesen Prozess erstellt wird. Dadurch kann jeder Prozess Änderungen in der eingeblendeten DLL machen, ohne dass diese Änderungen für andere Prozesse sichtbar würden oder gar auf die Disk zurückgeschrieben.
(Und solche Änderungen zu machen ist oft nötig. Welche Änderungen das sind und warum die nötig sind würde hier aber etwas den Rahmen sprengen.)
BTW: Genau der selbe Mechanismus wird auch zum Laden von .EXE Files verwendet. D.h. wenn du 2x gleichzeitig die selbe .exe ausführst, dann lädt das OS die auch bloss 1x.
Wenn dich das genauer interessiert, dann such mal nach Begriffen wie z.B. Virtual Memory, Memory Mapped Files, Portable Executable oder Relocation Table.
Bei .NET DLLs läuft aber vermutlich alles etwas anders, denn .NET DLLs enthalten kaum direkt ausführbaren Code sondern CIL Code. Dieser muss erstmal von einem JIT Compiler in direkt ausführbaren Code übersetzt werden. Wie das genau läuft und welche Optimierungen es dabei gibt oder nicht gibt, das müsstest du einen .NET Experten fragen.