Jint: Ausnahme bei Speicherlecks.

Erstellt am 26. Jan. 2021  ·  5Kommentare  ·  Quelle: sebastienros/jint

Ich verwende die Jint-Version: 13.0.0-Beta-1767.
Ich habe das Memory Leak wie folgt gefunden:

image

Bitte überprüfen. Dankeschön.

bug

Alle 5 Kommentare

Sehr schöner Screenshot. Können Sie Code-Repro anhängen (als Text, nicht als Bild)?

Das ist meine Funktion:

öffentliche statische Zeichenfolge RunJavaScriptSchedule(GlobalScheduleModel _Schedule)
{
CancelTokenSourceEvent cancelToken = new CancelTokenSourceEvent();
Versuchen
{
SystemInterfaceBLL InterfaceFunctionObject = new SystemInterfaceBLL();
InterfaceFunctionObject.JavascriptScenesObj = _Schedule;

            // For prevent the endless loop => Can't Refesh to change Command Data. 
            // => Check the Scription is running or not. 
            // => If not => Adding CancelationTokenSource for manual Cancel.

            bool isOk = false;
            foreach(var cancelSource in TriggerCheckingService.CancelEventList.ToList())
            {
                if (cancelSource == null)
                {
                    TriggerCheckingService.CancelEventList.Remove(cancelSource);
                    continue;
                }

                if ((cancelSource.Id == _Schedule.Id) && (cancelSource.Type == EventType.ScheduleTrigger))
                {
                    if (cancelSource.NumberThread > 0) return "Error: More Than One Threads Are Running";     
                    cancelSource.NumberThread = 1;                  
                    isOk = true;
                    cancelToken = cancelSource;
                    break;
                }    
            }
            if(!isOk)
            {
                cancelToken = new CancelTokenSourceEvent(_Schedule.Id, EventType.ScheduleTrigger, 1);
                TriggerCheckingService.CancelEventList.Add(cancelToken);
            }    

            var engine = new Engine(options =>
            {
                // Use a cancellation token.
                options.CancellationToken(cancelToken.CancelSource.Token);
            });

            engine.SetValue("SystemLib", InterfaceFunctionObject);
            string command = _Schedule.JavaScriptAction;

            var result = "";
            try
            {
                result = engine.Execute(command).GetCompletionValue().ToString();
            }
            catch(Exception exp)
            {
                result = exp.ToString();
            }

            if (result.Trim() == "undefined") result = "";
            TriggerCheckingService.CancelEventList.Remove(cancelToken);

            // Update Data Only
            if ((result != "null") && (result.Trim() != "")) result = result + "\n"; else result = "";    
            string debug = _Schedule.Debug ?? "";

            GlobalScheduleDB.UpdateDebug(_Schedule, result + debug);
            GlobalScheduleDB.UpdateLastTime(_Schedule, Helper.UnixTime.GetCurrentMilliSecond());

            return (result + debug);
        }
        catch (Exception exp)
        {
            TriggerCheckingService.CancelEventList.Remove(cancelToken);
            var result = exp.ToString();
            // Update Data Only
            if ((result != "null") && (result.Trim() != "")) result = result + "\n"; else result = "";
            string debug = _Schedule.Debug ?? "";
            GlobalScheduleDB.UpdateDebug(_Schedule, result + debug);
            GlobalScheduleDB.UpdateLastTime(_Schedule, Helper.UnixTime.GetCurrentMilliSecond());

            return result;
        }
    }

Es wurde ein Problem auf Esprima-Seite erstellt, da es besser ist, es zuerst dort zu beheben und es dann an Jint weiterzuleiten.

Danke @lahma , wie ich sehe, hast du es behoben und kannst du mir sagen, wie lange es bis zum nächsten Fix-Release

Es sollte ziemlich bald auf NuGet erscheinen, gerade hochgeladen. Danke für die Berichterstattung und Details!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen