ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
1038
1038
EMPFEHLEN
-
hi liebe community,
ich habe ein problem...
...und zwar haut mein asp.net webservice bei jedem aufruf (alle 10 sekunden) über soap einige kb bzw. mb in den in den prozess aspnet_wp.exe. Dies ist soweit ich weiß das .Net-Framework. ich würde mal sagen, der cacht alles oder so...
wenn der prozess aspnet_wp.exe dann etwa 550mb in den ram geschaufelt hat, stürtz der asp.net webservice ab (der asp.net webservice ein estos sdk). gleichzeitig stürtz dann auch der cti procall server ab - sprich der telefonserver (wieso auch immer
)
wie kann man verhindern, dass das .net framework der ram vollhaut bzw. alles cacht?
oder wisst Ihr, wieso der dem Ram vollknallt?
vielen dank für antworten schonmal im vorraus
Viele Grüße, Domi
edit: gibt es eine Möglichkeit in ASP.NET einen Prozess (aspnet_wp) zu killen? hab schon gegooglet, aber nichts lief einwandfrei...Geändert von Do_0mi (04.12.09 um 12:14 Uhr)
Wer, wenn nicht ich? Wann, wenn nicht jetzt?
-
Hi
höchstwahrscheinlich hast du irgendwo ein Memory Leak und räumst nicht richtig auf
http://www.google.de/search?q=.net+m...ient=firefox-aGrüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
Würde auch schwer behaupten das der Fehler in deinem Webservice liegt. Der GC macht seine Aufgabe im allgemeinen sehr gut. Hast du einen FileStream oder ähnliches in deinem Service? Poste mal den Quellcode, Dann können wir vllt helfen, kannst du einschränken wann er soviel in den Ram läd, also die Methode die das hervorruft?
Gruß
AvorinBitte bewerte mich wenn ich dir weitergeholfen habe. und markiere dein Beitrag als erledigt wenn das Problem geklärt wurde.
-
@ Nico Graichen: Memory Leak wird es wahrscheinlich sein...
aber wie entfernen?
@ Avorin: FileService nicht direkt. Der WebService greift Daten des Telefonservers (cti server) ab...
Hoffe Ihr könnt mit dem Code etwas anfangen. Als ich die zweite try-catch-Anweisung mal ausgeblendet hab, hatte sich der steigende Ram pro Aufruf nur um ~30kb erhöht...PHP-Code:private ENETTSCLib.Application enettsc = null;
private ENETTSCLib.Line myLine = null;
private static long ELINEERR_OPERATIONUNAVAIL = 0x80000049;
public ArrayList Connecting()
{
if (enettsc != null)
{
enettsc.Dispose();
enettsc = null;
}
try
{
enettsc = new ENETTSCLib.ApplicationClass();
}
catch (Exception)
{
throw;
}
enettsc.SetServer(strServer, int.Parse(strPort));
enettsc.SetLogin(strUsername, strPassword);
try
{
enettsc.Connect();
myLine = enettsc.FirstLine;
enettsc.OnCallBusy += new _IApplicationEvents_OnCallBusyEventHandler(enettsc_OnCallBusy);
enettsc.OnCallConferenced += new ENETTSCLib._IApplicationEvents_OnCallConferencedEventHandler(enettsc_OnCallConferenced);
enettsc.OnCallConnected += new ENETTSCLib._IApplicationEvents_OnCallConnectedEventHandler(enettsc_OnCallConnected);
enettsc.OnCallDestroyed += new ENETTSCLib._IApplicationEvents_OnCallDestroyedEventHandler(enettsc_OnCallDestroyed);
enettsc.OnCallDialing += new ENETTSCLib._IApplicationEvents_OnCallDialingEventHandler(enettsc_OnCallDialing);
enettsc.OnCallDisconnected += new ENETTSCLib._IApplicationEvents_OnCallDisconnectedEventHandler(enettsc_OnCallDisconnected);
enettsc.OnCallHold += new ENETTSCLib._IApplicationEvents_OnCallHoldEventHandler(enettsc_OnCallHold);
enettsc.OnCallOffering += new ENETTSCLib._IApplicationEvents_OnCallOfferingEventHandler(enettsc_OnCallOffering);
enettsc.OnCallRingback += new ENETTSCLib._IApplicationEvents_OnCallRingbackEventHandler(enettsc_OnCallRingback);
enettsc.OnRemotePartyChanged += new ENETTSCLib._IApplicationEvents_OnRemotePartyChangedEventHandler(enettsc_OnRemotePartyChanged);
foreach (ENETTSCLib.Line line in enettsc.Lines)
{
line.Open();
}
refreshTreeView();
// ...
}
Mit freundlichen Grüßen, DomiWer, wenn nicht ich? Wann, wenn nicht jetzt?
-
Ich vermute ein hier: http://blogs.msdn.com/tess/archive/2...ry-baloon.aspx
(das relevante steht direkt vor den Kommentaren)
beschriebenes Problem, nämlich das du die Eventhandler jedes mal neu anmeldest und nicht wieder abmeldest.
Edit: Womöglich auch die foreach schleife -> wie groß ist denn enettsc.Lines? und muss das jedes mal durchiteriert werden?Geändert von Avorin (04.12.09 um 16:41 Uhr)
Bitte bewerte mich wenn ich dir weitergeholfen habe. und markiere dein Beitrag als erledigt wenn das Problem geklärt wurde.
-
@ Avorin: Danke für den Post. Die Seite hatte ich auch schon gefunden. Bin nur noch nicht auf den Sprung gekommen, wie ich das nun "funktionsfähig" einbinde...

In der enettsc-Lines sind etwa 200 "line", die auch immer durchlaufen müssen / sollten.
Könnt Ihr mir einen Tipp geben, an welche Stelle ich die Code-Schnipsel vom o.g. Link einbinde und wie genau?Wer, wenn nicht ich? Wann, wenn nicht jetzt?
-
Genau so wie du die Handler anmeldest eben nur mit einem Minus.
also:
Code :1
enettsc.OnCallBusy -= new _IApplicationEvents_OnCallBusyEventHandler(enettsc_OnCallBusy);
das new ist wichtig sofern du keine Referenz auf den erstellten Handler speicherst(was du ja eh nicht wollen kannst
)
das tust du das sobald das Event nicht mehr gefeuert wird , spätestens aber am Ende der Methode bzw. des Services. oder im Dispose() von "enettsc". Aber das natürlich nur wenn du es auch disposed..(was du vermutlich auch tun solltest)
http://www.mycsharp.de/wbb2/thread.php?threadid=47346
GrußGeändert von Avorin (04.12.09 um 18:51 Uhr)
Bitte bewerte mich wenn ich dir weitergeholfen habe. und markiere dein Beitrag als erledigt wenn das Problem geklärt wurde.
-
Danke für den Post Avorin
hmm... darauf hätte ich ja auch selbst kommen können. stand ja irgendwie schon da...
naja...
Es funktioniert aus irgendeinem Grund trotzdem immernoch nicht
stimmt es so überhaupt?
... und kommt erst das deregistrieren und dann der Disposer oder umgekehrt? bin mir da nicht so sicher, jedoch haut (egal wie ich es mache) das script immernoch den Ram voll...PHP-Code:try
{
enettsc.Connect();
myLine = enettsc.FirstLine;
enettsc.OnCallBusy += new _IApplicationEvents_OnCallBusyEventHandler(enettsc_OnCallBusy);
enettsc.OnCallConferenced += new ENETTSCLib._IApplicationEvents_OnCallConferencedEventHandler(enettsc_OnCallConferenced);
enettsc.OnCallConnected += new ENETTSCLib._IApplicationEvents_OnCallConnectedEventHandler(enettsc_OnCallConnected);
enettsc.OnCallDestroyed += new ENETTSCLib._IApplicationEvents_OnCallDestroyedEventHandler(enettsc_OnCallDestroyed);
enettsc.OnCallDialing += new ENETTSCLib._IApplicationEvents_OnCallDialingEventHandler(enettsc_OnCallDialing);
enettsc.OnCallDisconnected += new ENETTSCLib._IApplicationEvents_OnCallDisconnectedEventHandler(enettsc_OnCallDisconnected);
enettsc.OnCallHold += new ENETTSCLib._IApplicationEvents_OnCallHoldEventHandler(enettsc_OnCallHold);
enettsc.OnCallOffering += new ENETTSCLib._IApplicationEvents_OnCallOfferingEventHandler(enettsc_OnCallOffering);
enettsc.OnCallRingback += new ENETTSCLib._IApplicationEvents_OnCallRingbackEventHandler(enettsc_OnCallRingback);
enettsc.OnRemotePartyChanged += new ENETTSCLib._IApplicationEvents_OnRemotePartyChangedEventHandler(enettsc_OnRemotePartyChanged);
foreach (ENETTSCLib.Line line in enettsc.Lines)
{
line.Open();
}
refreshTreeView();
enettsc.OnCallBusy -= new _IApplicationEvents_OnCallBusyEventHandler(enettsc_OnCallBusy);
enettsc.OnCallConferenced -= new ENETTSCLib._IApplicationEvents_OnCallConferencedEventHandler(enettsc_OnCallConferenced);
enettsc.OnCallConnected -= new ENETTSCLib._IApplicationEvents_OnCallConnectedEventHandler(enettsc_OnCallConnected);
enettsc.OnCallDestroyed -= new ENETTSCLib._IApplicationEvents_OnCallDestroyedEventHandler(enettsc_OnCallDestroyed);
enettsc.OnCallDialing -= new ENETTSCLib._IApplicationEvents_OnCallDialingEventHandler(enettsc_OnCallDialing);
enettsc.OnCallDisconnected -= new ENETTSCLib._IApplicationEvents_OnCallDisconnectedEventHandler(enettsc_OnCallDisconnected);
enettsc.OnCallHold -= new ENETTSCLib._IApplicationEvents_OnCallHoldEventHandler(enettsc_OnCallHold);
enettsc.OnCallOffering -= new ENETTSCLib._IApplicationEvents_OnCallOfferingEventHandler(enettsc_OnCallOffering);
enettsc.OnCallRingback -= new ENETTSCLib._IApplicationEvents_OnCallRingbackEventHandler(enettsc_OnCallRingback);
enettsc.OnRemotePartyChanged -= new ENETTSCLib._IApplicationEvents_OnRemotePartyChangedEventHandler(enettsc_OnRemotePartyChanged);
enettsc.Dispose();
enettsc = null;
return y;
}
catch (Exception)
{
return null;
}
Viele Grüße, Domi
edit: Selbst mein Ausbilder ist ratlos, wieso es nicht funktioniert...
Wäre echt supercool, wenn Ihr noch paar Ideen auf Lager habt. ich vertrau euch
edit: - CLOSED -
ESTOS ProCall SDK sucksGeändert von Do_0mi (10.12.09 um 12:11 Uhr)
Wer, wenn nicht ich? Wann, wenn nicht jetzt?
Ähnliche Themen
-
Browser cacht Applets?
Von Smily0412 im Forum JavaAntworten: 1Letzter Beitrag: 07.11.07, 17:45 -
Java Media Framework (JMF): WebCam stürzt nach gewisser Zeit ab
Von lukelukeluke im Forum JavaAntworten: 3Letzter Beitrag: 02.10.06, 15:32 -
Hilfe: Multiplayer-Spiel knallt Server ab
Von Veränderung im Forum Flash PlattformAntworten: 6Letzter Beitrag: 28.09.06, 10:39 -
C:\ Systemlaufwerk voll obwohl er nicht alles anzeigt
Von SeoP im Forum HardwareAntworten: 3Letzter Beitrag: 18.01.06, 17:45 -
Aktuelle Zeit auslesen knallt
Von Snape im Forum Borland CBuilder und VCLAntworten: 1Letzter Beitrag: 30.09.04, 16:52





Zitieren


Login





