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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. await גורם לפעמים לפיצוץ הזכרון לג'יגות

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

מתוזמן נעוץ נעול הועבר תכנות
4 פוסטים 2 כותבים 121 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אהרן
    כתב ב נערך לאחרונה על ידי
    #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
          • דף הבית
          • קטגוריות
          • פוסטים אחרונים
          • משתמשים
          • חיפוש
          • חוקי הפורום