tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
1038
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Do_0mi
    Do_0mi Do_0mi ist offline Mitglied Silber
    Registriert seit
    May 2008
    Beiträge
    62
    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?

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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-a
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    Avorin Avorin ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    59
    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ß

    Avorin
     
    Bitte bewerte mich wenn ich dir weitergeholfen habe. und markiere dein Beitrag als erledigt wenn das Problem geklärt wurde.

  4. #4
    Avatar von Do_0mi
    Do_0mi Do_0mi ist offline Mitglied Silber
    Registriert seit
    May 2008
    Beiträge
    62
    @ Nico Graichen: Memory Leak wird es wahrscheinlich sein...
    aber wie entfernen?
    @ Avorin: FileService nicht direkt. Der WebService greift Daten des Telefonservers (cti server) ab...

    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(strServerint.Parse(strPort));
                
    enettsc.SetLogin(strUsernamestrPassword);

                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();
                    
    // ...


    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...

    Mit freundlichen Grüßen, Domi
     
    Wer, wenn nicht ich? Wann, wenn nicht jetzt?

  5. #5
    Avorin Avorin ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    59
    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.

  6. #6
    Avatar von Do_0mi
    Do_0mi Do_0mi ist offline Mitglied Silber
    Registriert seit
    May 2008
    Beiträge
    62
    @ 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...

    Zitat Zitat von Avorin Beitrag anzeigen
    Womöglich auch die foreach schleife -> wie groß ist denn enettsc.Lines? und muss das jedes mal durchiteriert werden?
    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?

  7. #7
    Avorin Avorin ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    59
    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.

  8. #8
    Avatar von Do_0mi
    Do_0mi Do_0mi ist offline Mitglied Silber
    Registriert seit
    May 2008
    Beiträge
    62
    Danke für den Post Avorin

    Zitat Zitat von Avorin Beitrag anzeigen
    Code :
    1
    
    enettsc.OnCallBusy -= new _IApplicationEvents_OnCallBusyEventHandler(enettsc_OnCallBusy);
    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?

    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;
                } 
    ... 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...

    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 sucks
    Geändert von Do_0mi (10.12.09 um 12:11 Uhr)
     
    Wer, wenn nicht ich? Wann, wenn nicht jetzt?

Ähnliche Themen

  1. Browser cacht Applets?
    Von Smily0412 im Forum Java
    Antworten: 1
    Letzter Beitrag: 07.11.07, 17:45
  2. Antworten: 3
    Letzter Beitrag: 02.10.06, 15:32
  3. Hilfe: Multiplayer-Spiel knallt Server ab
    Von Veränderung im Forum Flash Plattform
    Antworten: 6
    Letzter Beitrag: 28.09.06, 10:39
  4. Antworten: 3
    Letzter Beitrag: 18.01.06, 17:45
  5. Aktuelle Zeit auslesen knallt
    Von Snape im Forum Borland CBuilder und VCL
    Antworten: 1
    Letzter Beitrag: 30.09.04, 16:52