Hallo, ich habe einen Server programmiert, der auf eine MSSQL Datenbank zugreift.
Einen Tag läuft es aber irgendwann am Morgen (ca. 4 Uhr) wird die Verbindung getrennt. Ich kann sie dann nicht mehr öffnen. Warum? Was kann ich da machen?
Ich bin für jede Hilfe dankbar.
Hier ist der Code zum öffnen einer Verbindung. Immer, wenn die Verbindung geschlossen ist, versuche ich hiermit die Verbindung wieder zu öffnen. Ich verwende server1 als Hostname, sa als Username und kein Passwort. Schlägt der Verbindungsversuch fehl, so warte ich erst 10s dann 30s dann 60s. (Ich dachte das könnte helfen) aber leider tut es dies nicht. Was kann ich da machen?
Hallo,
ich habe folgendes Problem: Ich habe mit einem Memory Profiler festgestellt, dass mein Programm zu viele Threads im Speicher hält.
Prinzipiell starte ich die Thread auf 2 Weisen:
...
public void start()
{
Thread thread = new Thread(new ThreadStart(this.machewas));
thread.Start();
return; // Hier das return, damit der GC den Thread irgendwann wieder vom Speicher entfernt
}
...
oder so:
...
public void start2()
{
ThreadPool.QueueUserWorkItem(new WaitCallBack(this.machewasandres));
return;
}
Im ersten Fall habe ich dann zu viele Instanzen von class Thread im Speicher und im zweiten Fall zuviele instanzen von WaitCallBack
Zu Testzwecken starte ich alle 500ms einen neuen Thread, der Speicher ist dann in kürzester Zeit voll.
Was kann ich da tun um die Klassen vom Arbeitsspeicher zu entfernen? Ich bin für jede Hilfe dankbar
Hallo,
ich verwende in meinem Projekt den System.Timer.Timer. Ich hab da ein Intervall gesetzt, so 20ms, und lasse ihn laufen. Das Elapsed-Ereignis wird immer brav ausgelöst.
Warum aber wird das Elapsed-Ereignis plötzlich bei mir nicht mehr ausgelöst? Ich verwende kein Stop() und setze auch nirgends Enabled auf false.
So eine Woche lang funktioniert alles wunderbar und dann irgendwann kommen die Ereignisse nicht mehr.
ich hab ein Multicast-Delegate für ein Ereignis programmiert. Andere Objekte verwenden dieses Ereignis. Doch jetzt möchte ich jede Methode, die dieses Ereignis empfangen will, in einem eigenen thread starten.
(So ähnlich wie der System.Timer.Timer. Der startet auch immer das Elapsed-Ereignis in einem Thread)
Wie kann ich denn jede, in dem delegate registrierte Methode, in einem separaten Thread laufen lassen?
Ich brauche es zur Fehlersuche: Mein Serverprogramm verbraucht 1,2GB RAM.
Doch warum?
Bevor ich da vermutungen anstelle, will ich erstmal testen, ob dieser wert realistisch ist, weil er wirklich belegt wird, oder ob nur der GC den Speicher nicht freigibt.
Ausserdem will ich damit feststellen, welche Teile wie viel Speicher belegen und somit die Speicherauslastung optimieren.
Hallo,
gibt es eine möglichkeit den Speicherverbrauch von objekten zu bestimmen?
Im konkreten fall hab ich eine ArrayList, die gefüllt ist mit Strukturen.
Ich will also den Speicher, den die ArrayList für die Verwaltung braucht und die Summe des Speichers, die jede Struktur belegt.
Sowas hab ich mich auch schon oft gefragt. Ich denke da musst du die Thunderbird Entwickler direkt ansprechen, also in den richtigen Foren fragen. Da wissen sie soetwas.
Wenn dus rausgefunden hast, so sage mir bitte auch bescheit, ich will es auch wissen
Die Exception ist nicht Reproduzierbar, ich hab zum Glück eine Zweite Exception, die bei DateTime.Subtract nicht gefangen wurde. Vielleicht finde ich darüber den Grund.
Wer kann mir denn tips geben, so eine Exception zu finden?
In dem Programm sind noch 2 seltsame sachen:
1. Einer meiner Timer, löst keine Ereignisse mehr aus, obwohl Enabled = true ist. Ich muss nocheinmal Start() aufrufen, wenn das Programm eine TCP-Verbindung annimmt
2. Ich hatte eine Meldung, dass das Programm eine Resourcendatei nicht laden kann, obwohl ich keine GUI verwende (also nichtmal System.Windows.Forms referenziere)
Weis jemand, in welchem Zusammenhang das ganze Stehen könnte?
Hallo ich hab eine Exception, kann mir jemand helfen, was ich da zun soll?
Aus den ganzen daten folgere ich, dass diese Exception auftritt, wenn ich Zwei DateTime-Werte voneinander Subtrahiere. Die Informationen folgen unten:
Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Type: System.AccessViolationException
StackTrace: at System.DateTime.op_Subtraction(DateTime d, TimeSpan t) at System.CurrentSystemTimeZone.GetUtcOffsetFromUniversalTime(DateTime time, Boolean& isAmbiguousLocalDst) at System.CurrentSystemTimeZone.ToLocalTime(DateTime time) at System.DateTime.ToLocalTime() at System.DateTime.FromFileTime(Int64 fileTime) at System.Timers.ElapsedEventArgs..ctor(Int32 low, Int32 high) at System.Timers.Timer.MyTimerCallback(Object state) at System.Threading._TimerCallback.TimerCallback_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading._TimerCallback.PerformTimerCallback(Object state)
P.S. Ich werde nur sicheren verwalteten code und das Programm wurde mit 1.1 geschrieben (verwendet aber die 2.0 runtime). Also laut msdn darf ich diese Exception nicht erhalten
Hallo,
ich habe mit c# einen Dienst programmiert, ich will aber jetzt, dass er beim Start eine MessageBox oder eine Form anzeigt, wenn ein Fehler aufgetreten ist.
Hallo,
wie kann in in c# die GUI schneller aufbauen lassen?
Wenn ich eine Form mit vielen controls öffne, kann ich sehen, wie sie nacheinander erscheinen (das geht aber sehr schnell). Ausserdem habe ich so flicker-Effekte beim Resizing.
Wie kann ich dies Verbessern? Ich hab mal bei der Form DoubleBufferer auf true gesetzt, aber keine Verbesserung.
2. Habe ich einen Algorithmus, der umständerhalber einen Button auf Enabled, dann auf Disabled (Enables = false), dann wieder auf Enabled setzt. Dies erzeugt auch einen flickereffekt, obwohl ich davon ausging, dass die Form nicht neu gezeichnet wird (weil diese 3 zuweisungen innerhalb einer Methode passieren)
Was kann ich da machen um dies zu Verbessern? Danke
Das ist ganz leicht, daher erkläre ich es an einem Beispiel:
public class Global
{
public static int eineZahl = 10;
public static void macheWas()
{
}
}
// in .NET 2.0 gehts auch so:
public static class Global
{
// wie oben...
}
Also du brauchst das Schlüsselwort static
Zugreifen kannst du dann von überall aus mit Global.macheWas() oder mit Global.eineZahl = 5;
Verwende doch mal einen konstanten Seed-Wert. Dann ist die Zufallsfolge reproduzierbar.
Du solltest wicklich nicht jedesmal ein neues Random-Objekt instanziieren, weil du dann immer einen neuen Seed-Wert nimmst. Der genaue Wert ist unbekannt und wenn .NET intern seinen Seed-Wert aus der Uhrzeit ableitet, kann es sein, dass du immer den gleichen verwendest.
Naja, und 2 gleiche Seed-Werte bewirken, dass das Random.Next immer gleiche Werte ausspuckt.
Das console.WriteLine ist sau langsam, da vergeht viel Zeit -> neuer SeedWert.
Ohne console.WriteLine vergeht wenig Zeit -> gleicher Seed wert und Zufall ist futsch
Ich hab einen Timer, der alle 30s eine datei überprüft.
Parallel dazu verwaltet das Programm TCP-Verbindungen.
Unter Windows XP funtioniert alle einwandfrei aber unter Windows 2003:
Der Timer funtioniert, bis ich eine TCP-Verbindung aufgebaut habe. ab da löst der Timer keinen Elapsed-Ereignis mehr aus. (Es ist der System.Timers.Timer). Dieses verhalten ist aber nur im Release-Modus und nur unter Win2003. Im Debug-Modus funktioniert alles wunderbar.
Hat jemand schonmal soetwas erlebt?
Kann mit jemand einen Hinweis geben, was ich da machen könnte?