Hi,
ich versuche gerade die aktuelle ThreadId in eine Log zu bekommen.
Hierbei mene ich nicht die ManagedThreadId aus System.Threadding sondern ich meine die hexadezimale Zahl, die in Visual Studio auftaucht, wenn man die Ausgabe verfolgt.
So wie sich mir das darstellt, reicht der Snapshot Modus für mich aus.
Ich habe allerdings als ich nach updlock gesucht habe auf dieser Seite gelesen, dass für die betroffenen Spalten ein Index existieren muss.
Nachdem ich den eingerichtet hatte, lief es einwandfrei.
Danke für deinen Tip! Ohne den hätte ich die Seite und die Info nicht gefunden.
Mache ich schon seit gestern Mittag :-)
Manchmal habe ich den Eindruck, als wenn die MSDN einen zum "Buffer Overflow" zwingen möchte. Man Liest sooo viel und übersieht am Ende doch das wesentliche :-)
Bin demnach schon dabei mir die Infos dazu zu holen.
verwendetes Datenbanksystem: MSSQL 2005 Standard / Express / usw.
Hi Zusammen.
Ich habe hier eine mehr oder weniger mächtige DB Anwendung, die ich mit einem Lastentest durchgetestet habe. Hierbei habe ich einige Deadlocks gefunden und durch Änderungen im DB-Modell bereinigen können.
Hat alles wunderbar funktioniert. (Man kann ja im Voraus nicht an alles denken :-))
Nun stehe ich vor einem Problem, das ich nicht wirklich verstehe.
Tabelle:
Spalte1: ID - int - Autowert
Spalte2: Name - String
Spalte3: Info - String
Spalte3: Version - String
Spalte4: Datum - DateTime
Abläufe irgendwo in größeren Transaktionen:
Hinzufügen in Tabelle
Name = Name123
Info = Änderungen für Kunde X
Version = 04
Datum = 12.05.2007
Auslesen der Infos aller Versionen
Select * FROM Tabelle WHERE Name = 'Name123'
Das mache ich jetzt von mehreren Clients (natürlich mit unterschiedlichen Namen) und das Abfragen der Infos führt zu einem Deadlock.
"Die Transaktion befand sich auf Sperre Ressourcen aufgrund eines anderen Prozesses in einer Deadlock Situation und wurde als Deadlockopfer ausgewählt."
Was ich an dieser Stelle nicht verstehen kann ist, dass ich hier auf keinen Fall auf Zeilen zugreife, die in einer anderen Transaktion erstellt wurden! Die Namen sind zu 100% unterschiedlich!!!
Ich hoffe ich habe meinen Sachverhalt verständlich dar geboten!
Wenn noch Fragen offen sind, beantworte ich sie gerne.
Ach ja, ich arbeite mit der DB Einstellung: ALLOW_SNAPSHOT_ISOLATION ON" und der Session-Einstellung: "TRANSACTION ISOLATION LEVEL SNAPSHOT".
Viele Grüße und Danke an alle, die sich die Zeit nahmen sich das durch zu lesen,
maYer
Hallo FZelle,
danke für deinen Tip.
LinQ werde ich mir in der Tat in naher Zukunft anschauen.
Ich hatte aber den Eindruck, dass man damit nur Daten behandeln kann und nicht den Daten Container. Mein Ziel ist es die Tabellen zu erstellen und zu ändern und nicht deren Inhalte.
Ich benötige also etwas, dass mir anhand einer bestehenden und einer vorgegebenen Struktur die entsprechenden CREATE bzw. ALTER TABLE ausführt, Index und AutoInkrement anlegt etc.
Hi,
ich möchte gerne eine Art Data Model Designer erstellen.
Zumindest ein paar Basisklassen, mittels denen ich eine Tabelle anlegen oder anpassen kann.
Hierbei würde ich mich gerne mal konkret mit den im Namespace System.Data vorhandenen Klassen auseinander setzen.
Ist es möglich, dass ich eine DataTable im C# Code erstelle und diese einer Datenbank zuweise und diese Tabelle in der DB angelegt oder angepasst wird?
Wenn das zu ungenau ist, dann gehe ich gerne näher darauf ein, was ich meine.
Hallo riCo,
das kann ich gerne machen.
Ich habe zum Beispiel die Operationen "Auftrag erstellen" und "neuen Auftrag von Auftrag ableiten".
Jetzt sind an diesen Auftrag Positionen gekoppelt, die wiederum aus weiteren Positionen bestehen. Ich habe also einen mehr oder weniger komplexen Baum, den ich komplett durchlaufen muss.
Um sicher zu gehen, dass ich in einem Fehlerfall keine halben Aufträge im System habe, habe ich die komplette Operation durch eine Transaktion abgesichert.
So viel zum Vorgang.
Die Testaplikation sollte nun mehrere Benutzer gleichzeitig simmulieren, und damit eine parallele Abarbeitung der Operationen durchführen. Damit kommt es zwangsweise zu dem Fall, dass sich zwei simmulierte Benutzer gleichzeitig innerhalb einer Transaktion befinden.
Ich darf aber pro Prozess und Connection nur eine Transaktion offen halten.
Leider (dass muss ich dazu sagen) ist die Session/Connection statisch gehalten und ich kann nicht mal ebend flux eine zweite öffnen. Ist ein Design Problem, dass ich noch angehen muss, wofür ich aber im Moment keine Zeit habe.
Hi,
um den Standard-Text zu füllen: Ich arbeite mit der MSSQL 2005 Expr. und Std.
Nun zu meinem Problem.
Ich habe hier eine Applikation, die für mehrere User ausgelegt ist. Das bedeutet, dass es mehrere Clients gibt, die auf die Datenbank zugreifen und ihre Daten über die DB teilen.
Die Operationen, die mit den Daten durchgeführt werden, dauern unter Umständen mal etwas länger. Etwas länger dauert so ca. 5 - 10 Minuten und sind unter Umständen durch eine Transaktion abgesichert.
Nun sind bei manchen Nutzern Probleme aufgetreten, die ich zu Hause mit einer Testapplikation nachvollziehen möchte ohne dass ich hierfür zahlreiche PC´s benötige. (Ich bin noch bei der Planung des Testprogramms und habe fast keinen Code geschrieben!!!)
Meine Idee an dieser Stelle war/ist es, eine Testapplikation zu erstellen, die das Verhalten mehrerer Nutzer simuliert. Anhand der Systemressourcen möchte ich beeinflussen können, wie viele User auf einem PC simuliert werden.
Also den Ablauf der DB Operationen in eine Klasse und die Hauptmethode mehrfach mit einem neuen Thread aufrufen.
Kling erstmal gut finde ich.
Mein Problem an dieser Stelle ist, dass einige Operationen innerhalb einer Transaktion gekapselt sind. Jetzt darf ich aber nur eine Transaktion innerhalb eines Prozesses aufrufen. Diese Fehlermeldung habe ich zumindest ein paar mal gesehen.
Wie kann ich dieses Problem umgehen? Hat jemand dort eine Idee?
Meine Idee war jetzt, dass die Abarbeitung in eine eigene Applikation schiebe, die mich mit Startparametern aufrufe. Leider kann ich dann so schlecht gesammelte Informationen an die Steuernde Applikation senden und muss eine komplexe IPC implementierung vornehmen, was die Zeit eigentlich nicht her gibt.
Danke für Eure Hilfe, Infos und Unterstützung,
maYer
Hi,
ich habe an dieser Stelle einen Freeware Obfuscator gepostet. Was haltet ihr von dem Tool?
Ich habe folgendes getestet.
Mehrere dll´s mit den standard Einstellungen durch das Tool geschleust und auf Funktionalität getestet. --> Lief
Mit dem Reflektor die Dll´s angeschaut. --> Bin auf mehrere Fehlermeldungen gelaufen und konnte keinen richtigen Nährwet aus den Informationen ziehen.
Mit einer Trial Version von Spice auf die Bibliotheken geschaut. --> Jetzt kann ich nicht sagen, ob es daran lag, dass ich nur eine Trial Version hatte aber ich konnte auch nicht wirklich viel aus den Dll´s erkennen.
Ich finde den Schutz nach den Tests ausreichend aber mich würde interessieren, wo ihr eventuelle Schwachstellen seht.
Hallo zusammen,
ich habe ein kleines Problem, bei dem ich nicht mehr weiter weiß.
Es geht dabei um ein Remote Object, das ich versuche aufzubauen.
Es funktioniert im Debug-Modus, es funktioniert, im Release-Modus, wenn ich es aus der VS-Umgebung starte.
Aber es funktioniert nicht, wenn ich es im Release Modus ohne VS-Umgebung starte.
Die Ausnahme, die ich bekomme lautet: Der Typeninitialisierer für NameSpace.Klasse hat eine Ausnahme verursacht.
Aus früheren Implementierungen weiß ich, dass man es tunlichst vermeiden soll, das Remote-Objekt in einer statischen Methode oder einer statischen Klasse aufzubauen.
Ich habe es nach einigem hin und her nun direkt im Mainform implementiert. Nix statisch, nix irgendwas. Ich versuche jetzt noch einmal einen BG-Worker damit zu beschäftigen, damit es nicht im GUI-Thread passiert. Aber ansonsten fehlt mir wirklich die Fantasie, an was es noch liegen könnte.
Vielleicht fällt Euch ja noch etwas ein, an das man beim Aufbau vom RemoteObjekten denken sollte.
Hi svenson,
ich habe da gerade auf dem Blog geschaut und nichts gefunden über das ich automatisch auf die Beta-Tester-Liste komme.
Kann es sein, dass ich erst mit Wesner Moise kommunizieren muss, und er mich handisch auf die Liste setzt?
grummel,
reSharper kann ich gerade nicht testen, da ich das SP1 für VS2005 nicht installiert habe.
Die FlashDemo schaut aber schon sehr gut aus und ich werde mal versuchen durch zu drücken, dass wir SP1 installieren.
Hi,
ich habe mir NCover mal angeschaut.
Klasse Programm, wenn man einen schönen BlackBox-Test machen möchte um zu schauen, welche Codezeilen in dem Test genutzt werden.
Ich verfolge eher den theoretischen Ansatz.
Also ich möchte nicht herausfinden welcher Code nicht genutzt wird sondern ich möchte herausfinden, welcher Code nicht genutzt werden kann
Dabei setze ich natürlich voraus, dass kein Code über Reflection genutzt wird.
Geht das mit NCover auch oder kennt jemand ein Tool, was das kann?
Hi,
kennt jemand ein Tool, mit dem man nach nicht mehr verwendeten Code suchen kann? Oder gibt es die Möglichkeit schon in VS und ich kenne sie nicht?
Ich mache es im Moment so, dass ich die Solution öffne und bei Methoden, bei der ich den Verdacht habe, dass sie nicht mehr verwendet wird, über das Kontextmenu nach allen Verweisen suche.
Es wäre super, wenn man das irgendwie komfotabler lösen könnte
Hallo Zusammen,
ich möchte ein Sammlerprogramm erstellen, welches aus verschiedenen "eigenen" Applikationen Informationen sammelt.
Funktionell habe ich mir folgendes überlegt:
Programm X ist das Sammlerprogramm und A - D sind die eigenen Applikationen.
Als erstes möchte Programm A etwas an X senden. A schaut nach, ob Programm X gestartet ist. Wenn das nicht der Fall ist, dann wird das Programm X von A gestartet. Anschließend wird die Information an X gesendet.
Eine bidirektionale Kommunikation ist nicht notwendig.
Soweit zu meinen Vorstellungen.
Nun zu meiner Frage:
Wie löse ich das?
Hehe, ich weiß, dass ihr so allgemeine Fragen liebt aber mir fehlen noch die Schlagworte (Technologien), nach denen ich schauen muss um spezielleren fragen stellen zu können.
Ich bin Euch also dankbar um ein paar Tips - Vorschläge worein ich mich einlesen kann um meine Planun zu verfeinern.
Sooo,
das war eine sehr schnelle und überstürzte Antwort.
Zu meiner Applikation kann ich sagen, dass ich eigentlich schon recht genau getrennt habe.
Als unterste Schicht habe ich eine Connection, die auf das Inteface System.Data.IDbConnection implementiert hat um flexibel zu bleiben.
Leider habe ich in der darüber liegenden Schicht nicht so zu 100% getrennt
Da wird jetzt glaube ich ein bisschen Arbeit auf mich zukommen.
Da das DB-Modell nicht statisch ist, möchte ich an der Struktur nicht mehr so viel ändern. Es funktioniert sehr gut und es arbeiten schon einige Applikationen mit der Data-API.
man man man.
Das wird ein langes Wochenende
Wenn jemand eine Idee hat, was ich auf jeden Fall bedenken muss oder was ich für einen Ansatz verfolgen könnte.
Nur her damit
Der ComplexType MessageType wird unten definiert und oben benutzt.
Zusätzlich habe ich oben eine Enumeration für den Messagetyp eingebunden und unten eine Eindeutigkeitsbeschränkung auf das Element ID gelegt.
Der MessageType ist allerdings auch wieder weiter schachtelbar