• דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

await גורם לפעמים לפיצוץ הזכרון לג'יגות

מתוזמן נעוץ נעול הועבר תכנות
4 פוסטים 2 כותבים 74 צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אהרן
    כתב ב נערך לאחרונה על ידי
    #1

    זה הקוד

    while( !this.tryFinish &&
        !(data = await getData( this.Name ))
    ) {
     this.tryVariations()
    }
    

    לא תמיד, רק אם getData רץ יותר מדי פעמים
    או שהפונקציה שמריצה אותה מורצת יותר מדי פעמים במקביל (מה שקורה ברצה אסינכרונית)
    אם לא, זה אוכל א"ז ללא בעיה.

    יש לכם כיון מדוע זה קורה ומה הפתרון?

    בעבר tryVariations הריץ בסופו, את הפונקציה שעוטפת את הקוד הזה, רקורסיה, אבל בשביל בשביל שהמחסנית לא תתמלא, הרצתי א"ז בתוך setTimeout.

    זה בדיוק מה שרציתי לחסוך, את השרשורים המבלבלים האלו.

    תגובה 1 תגובה אחרונה
    0
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #2

    חש מצב לדמו שלם (כל הזרימה כולה) ומינימלי?

    אפשר ליצור קשר dovid@tchumim.com

    א תגובה 1 תגובה אחרונה
    2
  • א מנותק
    א מנותק
    אהרן
    השיב לdovid ב נערך לאחרונה על ידי אהרן
    #3

    @dovid

    
    const global1 = 1000000
    const global2 = 2000000
    const global3 = 3000000
    const global4 = 4000000
    const global5 = 5000000
    const global6 = 6000000
    
    
    class dbCtrl {
        static async getData( ...arg ) {
            let data = await new Promise( resolve => {
                setTimeout( resolve, 500 )
            })
            //db.get( ...arg ).catch( /*logIfBud*/ )
    
            return data && data.toString('utf8').split(',') 
        }
    }
    
    
    class dataCtrl {
    
        constructor( name ) {
            this.name = name
        }
    
        async getName() {
            let count = 0
            let data
            while( !this.tryFinish && /*Temporary:*/ (count++) < 5000 &&
                !(data = await dbCtrl.getData( this.name ))
            ) {
             this.tryVariations()
            }
    
            this.fullName = data
            return this.fullName
        }
    
        tryVariations() {
            this.name = this.name.replace(/"/g, '')
        }
    }
    
    
    class mainCtrl {
    
        constructor() {
            this.names = ['david', 'aharon']
        }
        
        async getAllNames() {
            this.fullNames = await Promise.all(
                this.names.map( n=> new dataCtrl(n).getName() )
            )
        }
    }
    
    new mainCtrl().getAllNames()
    
    

    הקוד הזה עובד בסדר
    אבל האמיתי לא
    אולי בגלל שיש שם גלובלים שנכלאים (closer) ומשוכפלים בפונקציות?

    תגובה 1 תגובה אחרונה
    1
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #4

    אני לא יודע, אני לא רואה פה בעיה.

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    1

  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.