Laden...
Avatar #avatar-2343.png
preli myCSharp.de - Member
Student Österreich Dabei seit 11.07.2007 343 Beiträge
Benutzerbeschreibung

Forenbeiträge von preli Ingesamt 343 Beiträge

10.12.2009 - 02:41 Uhr

Hallo,
Hab da ein kleines Problem bei dem ich eure Hilfe brauchen würde.

kurze Erklärung: ich habe ein Klasse welche zwei Konstruktoren besitzt.


public class XYZ
{

  public XYZ(string a, string b, string c) {}

  public XYZ(string d, string e) {}

}

Soweit so gut.
Wenn ich jetzt new XYZ( schreibe, schlägt mir Intellisense immer zuerst den Konstruktor mit nur zwe Argumenten vor. Die Klasse ist Teil einer Bibliothek und die sollte sehr einfach zu benutzen sein und ich hätte gerne, dass standardmäßig der Konstruktor mit 3 Parametern als erstes "empfohlen" wird.
Gibt es eine Möglichkeit dies irgendwie zu beeinflussen?

Liebe Grüße
Preli

06.12.2009 - 21:51 Uhr

Schön wäre es, wäre es so einfach. Es könnte an hunderten anderen Dingen auch liegen.

Aber da du (laut deinem Connectionstring) integrated Security benutzt, musst du alle anderen User definitiv auf dem Server Zugriff gewähren. Sollte aber über das Management Studio recht einfach gehen.

Liebe Grüße
Preli

06.12.2009 - 15:28 Uhr

Hängt es damit zusammen dass auf dem anderen Rechner kein Management Studio installiert ist?
Dann würde es auch heißen dass alle clients später management studio brauchen damit meine exe läuft?

Das Management Studio musst du natürlich nicht mit verteilen mit deiner Anwendung. Das wäre ja unsinnig.
Was aber sein kann ist dass auf dem anderen PC kein SQL Server installiert ist ODER wenn der PC auf die Datenbank auf einem anderen PC zugreift, dass der Zugriff dorthin nicht funktioniert (keine Verbindung besteht, Benutzer Berechtigung dafür fehlen, Firewall blockiert, ...)

Liebe Grüße
Preli

06.12.2009 - 03:00 Uhr

Hallo kampfsau (cooler Name),

Also deine 2 Fragen lassen sich in einem beantworten:
1.) es heißt nicht new Feld()[9,9] weil das den Anschein erwecken würde dass ein Konstruktor von Feld aufgerufen wird (was nicht der Fall ist)

2.) jetzt müsste auch klar sein warum du nicht auf Felder[0,0].Mine zugreifen kannst. Weil in deinem Feld noch gar keine Objekte sind. Du hast zwar ein Feld, aber überall steht _null _drinnen. Und null.Mine gibts natürlich nicht, deshalb die Fehlermeldung.

Du müsstest zuerst alle Felder einmal erstellen denn mit Felder = new Feld[9,9] reservierst du quasi nur einmal Speicherplatz:


for(int i = 0; i < 9; i++)
{
  for(int j = 0; j < 9; j++)
  {
    Felder[i,j] = new Feld();
  }
}

Kleiner Tipp anbei: in Zukunft musst du außerdem darauf achten keine Anfängerfragen zu stellen (deine obige Frage ist da meiner Meinung nach noch ein Grenzfall), manche im Forum sind da recht streng. Aber du hast Glück dass um diese Uhrzeit scheinbar niemand da ist 😁

Liebe Grüße
Preli

04.12.2009 - 19:31 Uhr

sooo,

@Xynratron schau doch bitte nochmal genau meinen Nicknamen an (ich bin immerhin kein Kalender 🙁 )

  1. muss ich dir recht geben, an das hab ich nicht gedacht. Meine Lösung bringt natürlich nur den ersten freien ab dem ersten Benutzer zurück X(

Aber so würd's gehen:


Select top 1 (KundenID+1)
from V_Kunde
where KundenID+1 not in (Select KundenID from Kunde)
order by KundenID

V_Kunde ist eine View die wie folgt aussieht:


SELECT KundenID
FROM Kunde
UNION SELECT 0

Liebe Grüße
Preli

04.12.2009 - 18:44 Uhr

Und selbst wenn man es standardmäßig nicht kann, wird man wohl den Web-Hoster bitten können, die DB nach außen freizuschalten.

Bitten wird man schon können - aber ob jeder Web-Hoster das freischaltet bezweifel ich jetzt mal. Einige Webhoster lassen von außen aus "Sicherheitsgründen" keine Verbindungen zu.

Ach ja, ich hab mich mal eine Zeit lang mit ASP.net Foren beschäftigt und das meiner Meinung nach beste Forum ist "yet another forum" http://www.yetanotherforum.net/
Hat auch intern eine Art API mit der man bestimmte Funktionen einfach ausführen kann.

Liebe Grüße
Preli

04.12.2009 - 18:36 Uhr

Bevor dieses Thema komplett in eine Threaddiskussion abrutscht möchte ich auch noch was sagen zu embedded Datenbanken:

---- SQLite ----
Vorteile:

  • schnell mit kleinen Datenmengen
  • wirklich einfach (weit verbreitet = viel Doku)
  • schnell bei kleinen Datenmengen und einfachen Abfragen
  • sehr kleine Bibliothek (Dateigröße)
    Nachteile:
  • nicht geeignet für große Datenmengen
  • bestimmte Abfragen sind unverhältnismäßig langsam (z.B. synchronisierte Subselects)
  • nur eine Transaktion gleichzeitig

---- Firebird ----
Vorteile:

  • Funktionalität (Triggers, Stored Proz., ...)
  • Wechsel zu Datenbankserver einfach möglich
    Nachteile:
  • laut meinen Benchmarks in den meisten Fällen eine Spur langsamer als SQLite und SQL Compact

---- SQL Server Compact ----
Vorteile:

  • sehr schnell beim Auslesen
    Nachteile:
  • Dateigrößenbeschränkungen von 4GB
  • Datenbankdatei braucht meist mehr Speicherplatz als SQLite und Firebird mit identen Daten

Liebe Grüße
Preli

04.12.2009 - 18:08 Uhr

@Florian
Ich habs jetzt mit einer Computed Column (Id+1) versucht. Performance bleibt ungefähr gleich.
Der Ausführungsplan sieht auch eigentlich gleich aus:

  • Hauptsächlich Left Anti Semi Join und Index Scan

Liebe Grüße
Preli

04.12.2009 - 16:52 Uhr

Hab gerade einen Test gemacht mit 1.000.000 (eine Million) Datensätzen. Mein Statement braucht um Durchschnitt ca. 0,5 Sekunden.
Sollte das zu langsam sein gibts immer noch diese Möglichkeit:


Select top 1 (KundenID+1)
from Kunde
where KundenID+1 not in (Select KundenID from Kunde) 

Zeit: 0,008 Sekunden 😁

Weiß aber nicht sicher ob bei dieser Version sichergestellt ist, dass die Zahlen der Reihe nach kommen.

//edit: KundenID muss logischerweise Primärschlüssel sein oder sonst einen Index haben damits einigermaßen schnell funktioniert.

Liebe Grüße
Preli

04.12.2009 - 16:25 Uhr

Hallo Humsch,

1.) Hoffe ich dass es einen guten Grund gibt warum du die Nummern auffüllen möchtest.

2.) so würds auch gehen


Select min(KundenID+1)
from Kunde
where KundenID+1 not in (Select KundenID from Kunde)

das Gute an diesem Code ist, wenn es keine freien Nummern mehr gibt, liefert dieser Teil einfach die nächste Nummer zurück.

Liebe Grüße
Philipp

04.12.2009 - 15:23 Uhr

Danke für eure Antworten.

Caché scheint ein recht großer Player in Sachen Obj. Datenbank zu sein. Leider allerdings kommerziell.

Postgres kenn ich und ich arbeite sogar bei meinem aktuellen Projekt damit. Eine Top Datenbank kann ich nur sagen. Ich persönlich finde sie auch recht einfach zu installieren, warten und benutzen. Das beste sind die vielen Features und dass auch bei großen Datenmengen noch alles super läuft (was bei anderen Open Source DBs wie Firebird und SQLite nicht der Fall ist)

Warum eine Objektdatenbank? Ich finde die Idee die Objekte so wie sie sind in die DB zu speichern einfach genial. Die Argumente aus dem Artikel haben mich da nicht wirklich beirrt.

Liebe Grüße
Philipp

03.12.2009 - 23:29 Uhr

verwendetes Datenbanksystem: das ist hier die Frage 😉

Hallo!
wollte mal fragen, ob jemand schon Erfahrungen mit Objektdatenbanken gemacht hat.

Ich hab selbst grad Eloquera ausprobiert. Scheint aber nicht wirklich 100%ig ausgereift zu sein, sprich buggi und das geht natürlich gar nicht bei einem Datenbanksystem. Sieht außerdem so aus als ob es (noch) keine Transaktionen unterstützen wurde und ein Forum oder ähnliche Communityhilfe dazu hab ich auch nicht gefunden.

db4o hab ich in einem Forum gelesen soll mit großen Datenmengen nicht besonders gut umgehen können. Außerdem wenn man es für was kommerzielles einsetzt kann's etwas teuer werden. Schaut sonst interessant aus.

Kann jemand eine ausgereifte opensource Objektdatenbank für .net empfehlen?

Liebe Grüße
Preli

12.11.2009 - 16:18 Uhr

sieht wirklich gut aus - danke

12.11.2009 - 04:51 Uhr

Hallo,

ich suche ein Buch oder Tutorial oder ähnliches, bei dem für C# Programmierer ASP.net erklärt wird. Ich will aber kein Buch in dem die Hälfte C# Grundlagen drinnen sind. Eher etwas das kurz und bündig die Unterschiede zwischen "Desktopapplikationen-programmieren" und "ASP.net Webseiten-programmieren" erklärt.

Kennt jemand vielleicht zufällig so etwas in der Art? (Buch, ebook, Tutorials, etc.)

Liebe Grüße
Preli

05.11.2009 - 06:34 Uhr

ohne es getestet zu haben ist diese aussage ohnehin ungültig.

Oje, erschwischt 😁

Ich bin jetzt in der Zwischenzeit komplett darauf umgestiegen mir mein XML Dokument "per Hand" zusammenzustellen. Soll heißen, dass ich die einzelnen Teile direkt in einen Stream reinschreibe. Ist logischerweise sehr performant.

Da ich das Dokument nur erstelle und nicht irgendwie verändere klappt das auch ganz gut. Außerdem sind meine Funktionen ähnlich rekursiv verschachtelt wie ein XML-Dokument weshalb ich eigentlich auch keine Probleme habe die Endtags zu vergessen.

Gruß
Preli

04.11.2009 - 14:06 Uhr

@Florian Reischl: ich will aber gar nichts serialisieren. Ich will nur ein XML Dokument zusammenstöpseln.

@kleines_eichhoernchen: ich muss meine XML Datei nur erstellen - weder lesen noch irgendwie anders analysieren. Soweit ich jetzt das richtig in Erinnerung hab ist XPathDocument ja eine schreibgeschützte Abbildung eines XML Dokuments im Speicher, also eher ungeeignet für mich

Ling to XML ist genau was ich brauche.
Was aber natürlich noch performanter ist, wäre das XML-Dokument per String und StringBuilder zusammenzustöpseln.
Hab mich für eine Michung aus diesen 2 Varianten entschieden.

Gruß
Preli

04.11.2009 - 01:14 Uhr

Linq to XML werd ich gleich mal ausprobieren und die Ergebnisse hier posten

------ edit begin

So, habe jetzt Linq einmal ausprobiert. So wie es aussieht ist Linq to XML wirklich etwas schneller als XmlDocument und um einiges eleganter.
Ein gutes Tutorial dazu hab ich hier gefunden: http://code-inside.de/blog/2008/02/28/howto-linq-to-xml-daten-schreiben/

------ edit ende

Ohne es jetzt getestet zu haben bezweifel ich einmal dass XML-Serialisierung recht schnell ist - außerdem hab ich keine Objektstruktur 8)

Liebe Grüße
Preli

04.11.2009 - 00:20 Uhr

Hallo,

verwendetes Datenbanksystem: "XML"

wie mein Titel schon sagt suche ich nach etwas mit dem man (wenn möglich so einfach) wie mit der XmlDocument Klasse XML-Dateien erstellen kann, aber vielleicht etwas schneller.
Bei meinen jetzigen Versuchen war XmlDocument SEHR langsam und es wird auch offiziell von Microsoft "gewarnt" dass die Klasse XMlDocument etwas resourcenfressend ist.
Kennt jemand vielleicht eine Bibliothek mit der das etwas zackiger geht?

Liebe Grüße
Preli

31.10.2009 - 19:23 Uhr

Hallo schrotty,

als Datenbank kommt SQLite zum Einsatz. Ich hatte anfangs Bedenken, dass bei großen Datenmengen das problematisch wird, jedoch hab ich auf meinem Heimserver schon seit ein paar Wochen das Backupprogramm laufen und sichere dort ca. 600 GByte. Sicherung wird automatisch jeden Tag durchgeführt.

Als Verschlüsselung nimm ich die bereits beim SQLite Provider eingebaute. Genauere Informationen über die Verschlüsselung stehen auch in meiner Doku

Kommentarfunktion für jede Backupversion ist eine hervorragende Idee - Danke.
Die Erweiterung bestimmte Ordner oder Dateien auszuschließen ist für eine der nächsten Versionen bereits vorgesehen.

Gruß
Preli

28.10.2009 - 17:33 Uhr

Heute möchte ich mein neuestes Projekt vorstellen: Saftbackup

Es handelt sich um ein Programm zum Sichern von Dateien mit Versionierung.
Jedesmal wenn eine Sicherung durchgeführt wird, werden nicht alle Dateien gesichert, sondern nur jene die sich verändert haben. Zusätzlich bleiben alle Vorgängerversionen erhalten.
Programm ist noch im Beta-Stadium, läuft jedoch schon recht zuverlässig und ich setzte es auch schon ein, um meine Daten zu sichern.

Einige Features sind:*Verschlüsselung *Komprimierung *zeitgesteuerte Backups *Analysen und Statistiken

  • ...

Mehr Infos, Dokumentation und ein Demo-Video gibts auf der dazugehörigen Homepage: www.saftware.net

Das Programm kann von jedem benutzt und weitergegeben werden. Den Quellcode möchte ich zurzeit jedoch nicht veröffentlichen, da ich erst den weiteren Entwicklungsverlauf abwarten möchte.

edit: Das Programm ist derzeit auf Englisch und Deutsch verfügbar. Die Sprache kann über "Hilfe"->"Sprache ändern" bzw. "help"->"change language" geändert werden.

Liebe Grüße
Preli

22.10.2009 - 15:24 Uhr

Kein Problem,
ich hoff du hast auch was gelernt dabei und nicht nur den Code kopiert 😉

Liebe Grüße
Preli

22.10.2009 - 15:05 Uhr

Hallo oliver1979,
überleg mal genau was deine Zeile in der foreach Schleife macht und was ein XML-Attribut ist:


listBox_ebene1_spektrum_save1.Items.Add(@Save1.Attributes["Count"].InnerText);

Save1 ist bereits dein Count. Du brauchst nicht mit Attributen machen wenn du keine hast. Ein Attribut würde so aussehen:


<Count eigenschaft1="wert1">leer</Count> 

Deine Zeile müsste eher in etwa so aussehen:


listBox_ebene1_spektrum_save1.Items.Add(Save1.InnerText);

Gruß
Preli

22.10.2009 - 14:34 Uhr

Hallo oliver1979,

In so einem Fall wie deinem benutze ich immer folgende Funktionen:

zum Öffnen/Laden des XML-Dokumentes:


XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(file);

Einzelne Knoten hole ich z.B. über SelectSingleNode


XmlNode root = xmldoc.SelectSingleNode("containers");

Und mehrere Knoten mit SelectNodes


XmlNode dk_pro = xmldoc.SelectSingleNode("DK-pro");
XmlNode root = xmldoc.SelectSingleNode("Save1");
foreach (XmlNode count in root.SelectNodes("Count"))
{
  //Zugriff auf Attribute
  count.Attributes[attribut_name].Value
  //Zugirff auf Inhalt (als String)
  count.InnerText
}

Gruß
Preli

03.10.2009 - 04:45 Uhr

Rufst du eventuell noch wo anders die Application.Exit() Funktion auf???

Zitat aus der MSDN:

The Form...Closed and Form...Closing events are not raised when the Application...Exit method is called to exit your application. If you have validation code in either of these events that must be executed, you should call the Form...Close method for each open form individually before calling the Exit method.

Soll heißen wenn du Application.Exit() aufrufst, werden FormClosed und FormClosing nicht ausgeführt! Das könnte ein Grund sein.

Ach übrigens, du brauchst Application.Exit() nicht aufrufen wenn das Hauptformular geschlossen wird, dann beendet das Programm nämlich von alleine. Und wenn das da unten nicht von deinem Hauptformular ist würd ich den Namen formMain in etwas anderes ändern 😉

Gruß
Preli

02.10.2009 - 20:25 Uhr

Und wo ist das Problem bei 408 KB?

Manchmal möchte man eine kleine Dateigröße für sein setup. Heutzutage kommt es zwar auf die paar kb wirklich nicht an, aber ab und zu kann es trotzdem erforderlich sein. (wie für eines meiner derzeitigen Projekte)

Das .NET Framework 3.5 mit allen derzeit erschienen Service Packs ist über 100 MB groß (Architekturneutral), da kommt es nicht wirklich auf wenige KBytes an

Die paar Kbytes müssen aber immer runtergeladen werden, das .net Framework nur wenn es nicht schon installiert ist (was es in Zukunft wohl immer seltener geben wird)

Ich als Entwickler und als potenzieller Endkunde finde eine Setup.exe seriöser als eine oder mehrere Script-Dateien.

Diese Scripts sollten ja auch in eine Setup.exe verpackt werden (wie in meinem ersten Post nachzulesen ist). Dann wird der potenzielle Endkunde meist gar nicht bemerken, dass solche Dateien existieren.

Gruß
Preli

02.10.2009 - 16:28 Uhr

@Björn: hast du eigentlich in die Dateien reingeschaut?
Für denn Fall das du nicht weißt was drinn steht:

http://www.adresse-zum-framework-eingeben.com/framework.exe

Wie man unschwer erkennen kann keine richtige Adresse zu irgendeinem Framework. Wenn jemand den Bootstrapper benutzen möchte muss er selbst das Framework hosten (oder irgendwo anders einen Link herbekommen).
Ich muss sagen ich finde diese Lösung derzeit auch nicht optimal, aber ich bin offen für Vorschläge, bis jetzt ist es der beste Weg den ich gefunden hab.

@kleines_eichhoernchen: danke für den Link. Aber den dotnetinstaller kenn ich auch bereits. Finde ihn auch recht gut, allerdings wenn ich mich nicht irre ist dieser Bootstrapper recht groß. 408 KB nur um auf das .net Framework zu prüfen find ich recht viel.

Gruß
Preli

01.10.2009 - 21:07 Uhr

Hallo allerseits,

wer kennt das Problem nicht, man hat ein .net Programm und will es weitergeben weiß aber nicht ob am Zielcomputer das .net Framework installiert ist.

Deshalb hab ich ein Skript geschrieben (teils Batch-Datei, teils VB-Script), welches1. prüft ob das .net Framework bereist installiert ist

  1. wenn nicht eine Meldung anzeigt, dass das Framework runtergeladen und installiert wird (mehrsprachig - derzeit Englisch oder Deutsch je nach der Sprache des Betriebssystems)
  2. erkennt ob das OS 32 oder 64bit ist und lädt das richtige .net Framework aus dem Internet
  3. startet die Installation
  4. (ist das Framework bereits installiert schließt sich das Script sofort wieder)

Und das alles in weniger als 2 kbyte 😁
Also sehr gut geeignet wenn man möchte dass die Größe des Setup Paketes klein bleibt.

Wie ist es zu benutzen?
Es gibt 4 Dateien:
1.downloaddotnet.vbs ... ist ein VB-Script zum downloaden einer Datei aus dem inet 1.TestForDotNetBatch.cmd ... batch Datei. Diese muss gestartet werden, um den ganzen Prüf- und Downloadprozess zu starten. 1.dotnet32.txt und dotnet64.txt ... Konfigurationsdateien von welcher Adresse das Framework runtergeladen werden soll. In jeder Datei steht eine Internetadresse von wo das .net Framework runtergeladen werden soll. Da ich bei Microsoft keinen dauerhaft gültigen direkten Link auf die framework-Exes finden konnte, hab ich die 64bit und 32bit Version des Frameworks runtergeladen und selbst bei mir gehostet. Die entsprechende Adresse gehört in diese Dateien.

Wenn man z.B. ein Setupprojekt oder selbstentpackendes Archiv hat, einfach einstellen, dass die Datei TestForDotNetBatch.cmd nach der Installation gestartet werden soll.

Ich hab das ganze auf XP und Vista getestet. Auf 2000/ME/98 funktioniert es ziemlich sicher nicht, könnte man aber evt. auch irgendwie hinkriegen.

Welche Frameworkversion?

Zurzeit ist das Skript für .net Framework 2.0 ausgelegt ist. Sprich, wenn Framework 2.0, 3.0 oder 3.5 installiert ist, dann passt alles. Wenn nicht, wird installiert.

Welches Framework installiert werden soll kann man ganz einfach selbst bestimmen, da man ja in die Dateien dotnet32.txt und dotnet64.txt die Links zu den Exe-Dateien eintragen muss.

Möchte man als Mindestvorraussetzung für sein Programm das 3.0 oder 3.5er Framework ist das kein Problem.

Die ersten drei Zeilen der TestForDotNetBatch.cmd Datei sehen wie folgt aus:


if exist "%WINDIR%\Microsoft.NET\Framework\v2.0.50727\" goto ende 
if exist "%WINDIR%\Microsoft.NET\Framework\v3.0\" goto ende 
if exist "%WINDIR%\Microsoft.NET\Framework\v3.5\" goto ende

In Zeile 1 wird also auf Framework 2 geprüft, auf Zeile zwei auf 3 usw.
Durch löschen der ersten Zeile wird somit nur mehr auf Version 3.0 und 3.5 geprüft, durch entfernen der ersten und zweiten Zeile nur mehr auf 3.5

Würde mich über Rückmeldungen (sei es auch nur Bug-Report) sehr freuen

Gruß
Preli

PS: bitte erzählt mir nicht dass es dafür ClickOnce gibt, das weiß ich. Was mich aber an ClickOnce stört ist, dass ohne ein ordentliches (teures) Zertifikat immer eine Warnmeldung vor der Installation kommt (sieht nicht schön aus). Außerdem ist meiner Erfahrung nach die Erkennung ob das .net Framework bereits installiert ist äußerst buggi.

30.09.2009 - 06:46 Uhr

Nur der Vollständigkeit halber: List.Sort benutzt Array.Sort, was wiederum Quicksort benutzt, was wiederum zu den schnellsten vergleichenden Sortieralgorithmen gehört.

Auf Suffix Sorting hätt ich eigentlich auch kommen können 🤔
Ich hab sowas zwar noch nie eingesetzt (war noch nie notwendig), sollen aber performancemäßig echt der Hammer sein.

Gruß
Preli

29.09.2009 - 03:07 Uhr

Na sieh einer an.
So einfach geht das 😁

Vielen Dank

Die Funktionen 1,2,3,4 und 5 waren nur exemplarisch. Ich bennen meine Methoden natürlich sinnvoller 😉

29.09.2009 - 02:23 Uhr

Also bei deinen 1.099.511.627.776 Vergleichen im Worst Case gehst du aber von einem Polynomiellen Sortieralgorithmus aus.
Vielleicht solltest du dich mehr ins Thema Sortieralgorithmus einlesen. Ich denke da ist das größte Potential (performancemäßig) rauszuholen. Wenn du nämlich einen Algorithmus nimmst, der nur n*log(n) als Laufzeit hat, hast du im Worst case plötzlich nur mehr 20.971.520 Vergleiche.

Interessant wäre sicher:

  • Quicksort (sehr schnell, aber im schlechtesten Fall quadratische Laufzeit)
  • Mergesort (im Gegensatz zu Quicksort stabiles Sortierverfahren und auch im worst case n*log(n) Laufzeit)
  • Radixsort (sehr interessant, da LINEARE Laufzeit, aber es gibt dafür andere Einschränkungen, da es kein vergleichender Algorithmus ist)
  • Heapsort (auch n*log(n) Laufzeit)

Du findest bei wikipedia zu jedem dieser Stickworte mehr Informationen.
Ach ja, und bei Quicksort ist der worst case bei nicht schon sortierten Werten soooooo unwahrscheinlich, dass er eigentlich zu vernachlässigen ist.

Gruß
Preli

29.09.2009 - 01:57 Uhr

Hallo,

ich würde gerne wissen ob es eine Möglichkeit gibt, wenn eine Exception auftritt, herauszufinden WO genau sie geworfen wurde.

zur Veranschaulichung:


try
{

function1();
function2();
function3();
function4();
function5();

} catch (Exception ex)
{
  //hier will ich nun feststellen ob die Exception in Funktion 1,2,3,4 oder 5 auftrat
}

Ist so etwas technisch überhaupt möglich (evt. per Reflection)?
Wäre toll wenn da jemand was genaueres dazu wissen würde.

Gruß
Preli

29.09.2009 - 01:49 Uhr

Hallo Chickenlord,

1.) Möglichkeit: wenn du ein Objekt mehrmals mit anderen Objekten verlgeichst, könntest du von diesem Objekt zuerst eine Art Hashcode berechnen und diesen zum Vergleichen nehmen.

2.) Möglichkeit: du versuchst deinen Algorithmus zu optimieren, sodass es weniger Vergleiche werden (du könntest ja etwas genauer schreiben, wie dein Programm/Algorithmus aussieht)

3.) Möglichkeit: Du könntest versuchen Kriterien zu finden, die oft unterschiedlich sind und den Vergleich mit diesen beginnen. Dann erkennt das Programm schneller, wenn zwei Objekte NICHT gleich sind.

4.) Möglichkeit: Kombinationen aus den Möglichkeiten 1,2 und 3 😉

Gruß
Preli

23.09.2009 - 16:22 Uhr

Okay, dann müsste ich meine Frage umstellen. Statt kein Kennwort will ich wissen ob er ein leeres oder nicht-leeres Kennwort benutzt 😁

Bei einem leeren Kennwort gibt es nämlich einige Einschränkungen was remotedesktop, Taskplaner, usw. angeht. Darum möchte ich das auch abprüfen.

Gruß
Preli

23.09.2009 - 16:13 Uhr

du kannst das Passwort so nicht abfragen. Wäre ja noch schöner 😉

Das ist mir schon klar. Sowas wollte ich natürlich auch nicht.
Ich will lediglich wissen ob der aktuelle Windowsbenutzer bei sich ein Passwort festgelegt hat oder nicht.

Die Idee mit dem LogonUser ausprobieren hatte ich auch schon, ich dachte es geht vielleicht anders (evt. einfacher)

Gruß
Preli

23.09.2009 - 15:50 Uhr

Hallo Kaji,

Es ist genauso wie zommi es sagt.

Wenn eine Schwimmübung nur in einem Trainingsplan vorkommt, dann gib der Schwimmübung einfach eine TrainingsplanID und gut is.
Wenn eine Übung aber in mehreren Plänen vorkommen kann (so stell ich mir das vor), dann musst du es genauso machen wie in deinem 2. Diagramm.
Einfacher geht das leider in einer relationalen Datenbank nicht.

Als kleiner Tipp würd ich aber mit den Bezeichnungen aufpassen. Statt Trainingsplaene würd ich eher etwas in der Art wie "Trainingsprogramm" benutzen. Auch benutzt du manchmal Mehrzahl (Gruppen, Schwimmuebungen) und manchmal Einzahl (Schwimmer).
Ich benutz grundsätzlich immer Einzahl, da es irgendwie klar ist dass es in einer Tabelle meist mehrere Zeilen geben wird.

Gruß
Preli

23.09.2009 - 15:23 Uhr

Hallo allerseits,

ich würde gerne in C# prüfen ob ein Windows Benutzer (eigentlich nur der aktuell angemeldete) ein Passwort hat oder nicht.

Liebe Grüße
Preli

10.09.2009 - 22:49 Uhr

Hehe, die Idee gefällt mir. 👍
Vielleicht werd ich das in abgeänderter Weise wirklich in mein Programm einbauen.

Liebe Grüße
Preli

10.09.2009 - 22:16 Uhr

Ausser .7zip gibts auch noch .7z.
Die über Google gefundene Seite kennt .7zip nicht einmal.

Ja, stimmt da hab ich einen Fehler gemacht. Es sollte .7z heißen.

Jeder gute Dateityp sollte ja nicht mehr stark komprimierbar sein, darum finde ich deine Idee etwas komisch.

Wie wir ja wissen gibts aber nicht nur "gute" Dateitypen 😉

Etwas komisch? Ja, mag vielleicht sein. Aber es ist trotzdem die schnellste Möglichkeit um ungefähr einschätzen zu können ob es sich auszahlt eine Datei zu komprimieren oder nicht.
(ein gewisser Unsicherheitsfaktor ist natürlich dabei, aber ich denke es gab zu diesem Thema schon mindestens eine Forumsdiskussion bezüglich "Komprimierbarkeit von Daten im Vorraus berechnen")

Gruß
Preli

PS: Danke für den Link - sehr nützlich

10.09.2009 - 21:44 Uhr

Hallo,

ich bin grad dabei für ein Projekt von mir eine kleine Liste von Dateiendungen zusammenzustellen, welche in den meisten Fällen kaum mehr komprimiert werden können.

Zurzeit hab ich: .jpg, .jpeg, .zip, .rar, .7zip, .wmv, .mp3, .mp4, .png, .gif

Gibts noch mehr Vorschläge, oder weiß jemand ob eine etwas ausführlichere Liste bereits irgendwo existiert?

Liebe Grüße
Preli

09.09.2009 - 04:33 Uhr

So was ähnliches hab ich ja versucht (siehe mein Code in Post #1)

Ähmmm... seh ich nicht so. Du hast einen Wrapper für die Color-Properties gebaut. Ich meinte eher einen Wrapper für die XMLSerializer Klasse, wobei ich denke das wäre nicht ganz so einfach zu realisieren wie ich mir das zu Beginn vorgestellt habe.

So auf den ersten Blick kann ich leider nicht sehen warum dein Code nicht funktioniert.
Vielleicht kannst du noch etwas Code posten wo du den serialize/deserialize aufrufst.

Gruß
Preli

09.09.2009 - 00:28 Uhr

Aber alles was ich gefunden habe, ist eben die Möglichkeit eine zweite Property zu erstellen (so wie hier:
>
).

Ich finde dass es auf dieser Seite eigentlich recht gute Workarounds gibt. Ob du da was besseres findest??? (Der Titel der Seite heißt ja nicht umsonst BEST SOLUTION for xmlSerializer and ... color) 😉

Was mir noch einfallen würde, du könntest eine eigene Serializer-Klasse schreiben: entweder eine von XMLSerializer ableiten, oder einen Art Wrapper um eine XMLSerializer Klasse (je nachdem was technisch leichter umzusetzten wäre). Diese Klasse sollte dann irgendwie jegliche Color Werte die serialisiert werden vorher z.B. in einen String umwandeln. Keine Ahnung ob das jetzt technisch überhaupt so einfach möglich ist - ist nur so eine Idee von mir.

Gruß
Preli

09.09.2009 - 00:17 Uhr

Danke, so etwas in der Art hab ich gesucht.

08.09.2009 - 19:22 Uhr

Hallo,

ich würde gern per C# einem Ordner (den ich erstelle) ein anderes Symbol zuweisen.

Sprich: nicht dieses gelbe Standardsymbol sondern ein anderes (am besten wäre wenn ich selbst ein *.ico Datei festlegen könnte)

Liebe Grüße
Preli

30.08.2009 - 03:37 Uhr

Sorry für meine späte Antwort.

Dieses C+-SQLite Projekt kannte ich noch gar nicht. Sehr interessant, allerdings befürchte ich dass es nicht so zuverlässig und fehlerfrei wie die C-Version von SQLite arbeitet. Ob's Performanceunterschiede gibt wäre auch interessant.

Die Abfrage an einen Server übergeben möchte ich nicht, da mein Programm eine Standalone Anwendung werden soll.

Ich habe jetzt das große Statement in viele kleine zerteilt und dadurch auch noch mächtig an Performance gewonnen. Eine Lösung mit der ich sehr gut leben kann 😁
SQLite ist zwar ziemlich gut - aber wenn es um synchronisierte Subselects geht ist es so ziemlich die langsamste DB die ich kenne (und ich kenn einige).

Gruß
Preli

//edit: ach ja, DANKE nochmal an alle für die Hilfe (vor allem den Tipp mit dem zerteilen des Statements)

27.08.2009 - 18:35 Uhr

So wie es aussieht (Internetrecherche) ist die Win32 TerminateThread Methode GANZ böse.
Neben zahlreichen Nebenwirkungen funktioniert es scheinbar auch nicht so richtig in allen Fällen. Bei mir braucht es zumindest auch eine ganze Weile bis sich der Thread beendet.
Ich werd jetzt eher dazu übergehen mein Monster-SQL-Statement in kleinere zu unterteilen bzw. versuchen zu optimieren.

Gruß
Preli

27.08.2009 - 17:19 Uhr

Ich nehm:
ADO.NET 2.0 Data Provider for SQLite
von http://sqlite.phxsoftware.com/

Eine Möglichkeit zum Abbruch eines Befehls hab ich bis jetzt noch nicht gefunden, wobei ich zugeben muss, dass ich noch etwas mehr Recherche in diese Richtung betreiben muss um ausschließen zu können, dass es nicht doch vielleicht möglich ist.

Gruß
Preli

27.08.2009 - 16:32 Uhr

Mach das ganze doch asynchron, setz eine vernünftige Zeitspanne für den Timeout und zeig dem User das irgendetwas im Hintergrund werkelt. Wenn er will kann er das abbrechen aber du lässt den asynchronen Aufruf einfach machen bis er fertig ist.

Das ganze wird eine Auswertung. Es hat wenig Sinn die fertig laufen zu lassen, wenn der User sie dann nicht mehr ansehen will. Und da die Auswertung bei großen Datenmengen auch mehrere Minuten bis Stunden dauern kann, wäre es etwas zu viel vom User erwartet wenn er so lange warten MUSS und es nicht abbrechen kann.

Und eine vernünftige Zeitspanne für's Timeout ist nicht so einfach, da ich als Programmierer nicht wissen kann wie viele Daten die User letztendlich in der Datenbank haben werden.

Das ganze passiert bei mir bereits asynchron in einem eigenen Thread, aber es wäre etwas unsauber programmiert wenn der User das Programm schließt und der Auswertungsthread aber noch eine halbe Stunde im Speicher weiterarbeitet 8o

Gruß
Preli

27.08.2009 - 15:09 Uhr

vielleicht kommst du per Kernel32 TerminateThread dran das ganze abzubrechen

Danke, werd mir das gleich mal ansehen.

Du weisst nicht was der unmanaged Code macht und evtl kannst du dann nicht mehr auf die Daten in SQLite zugreifen.

Unwahrscheinlich, da ich 1. nur ein Select Statement ausführe und 2. SQLite eigentlich die Daten immer konsistent halten sollte (selbst bei Systemabstürzen und ähnlichem)

Kannst du nicht einfach einen Timeout setzen?

Nein, da ich ja nicht nach einiger Zeit abbrechen möchte, sondern der User soll dazu in der Lage sein, wenn er nicht mehr länger warten möchte.

Gruß
Preli

27.08.2009 - 14:35 Uhr

Wenn der thread gerade unmanged Code ausführt, wirkt Thread.Abort erst, wenn der Thread von unmanaged wieder zurück in managed Code kehrt.

Aha, das hatte ich schon vermutet, danke für die Bestätigung.

Allerdings gibt es wege dass Problem zu umgehen, beispielsweise indem du das ganze asynchron machst (Beispiel:
>
).

Hier steh ich etwas auf der Leitung. Kommt hier denn nicht auch die Abort Funktion zum Einsatz?

Oder du verwendest statt eines großen SQL-Commands viele kleine, so dass schneller wieder von unmanaged zu managed Code übergegangen wird.

Gute Idee, werde ich einmal versuchen, weiß allerdings nicht, ob das in meinem Fall so einfach gehen wird.

Eventuell findest du aber auch einen Connector, der nur mit managed Code geschrieben wurde.

Der Connector ist managed Code, aber das SQL-Statement wird dann ja trotzdem irgendwann von SQLite ausgeführt - und die SQLite DLL ist unmanaged.

Vielen Dank für die Info
Gruß
Preli

27.08.2009 - 04:58 Uhr

Hallo allerseits,

habe da ein kleines Problem mit einem Thread, den ich per Thread.Abort gerne abbrechen würde. Leider läuft er trotz Abort-Aufruf noch weiter.
In der Thread-Funktion wird u.a. ein sehr aufwändiges und langes SQLite-Command aufgerufen, bei dem er sich dann nicht Aborten lässt.
Gibts eine Möglichkeit den Thread bzw. dieses Command zu beenden?

Liebe Grüße
Preli