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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. EF - הזיכרון לא משתחרר

EF - הזיכרון לא משתחרר

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

    בפונקציה הבאה אני מוסיף קרוב ל 700 אלף רשומות לטבלה, ומתקבלת שגיאה OutOfMemoryException
    השאלה מדוע הזיכרון לא משתחרר? לכאורא אחרי כל 100 אלף יש שיחרור מוחלט של כל המשאבים.

    Private Sub AddListToTree(ByVal list As List(Of Node))
    
            Dim db As New TreeDbContext
            db.Tree.Load
    
            Dim nodeId As Integer = 1
            Dim transaction = db.Database.BeginTransaction()
            Dim Counter As Integer = 0
    
            For Each node In list
    
                Counter += 1
                If Counter Mod 100000 = 0 Then
                    transaction.Commit()
                    transaction.Dispose()
                    db.Dispose()
                    db = New TreeDbContext
                    transaction = db.Database.BeginTransaction()
                    GC.Collect()
                End If
    
                node.Id = nodeId
                nodeId += 1
                db.Database.ExecuteSqlCommand(
                    "INSERT INTO [Tree]([Name], [Order], [Type], [Parent_Id]) VALUES (@p0, @p1, @p2, @p3);",
                    node.Name, node.Order, CByte(node.Type), If(node.Parent Is Nothing, DBNull.Value, node.Parent.Id))
            Next
    
            transaction.Commit()
            transaction.Dispose()
            db.Dispose()
    
        End Sub
    

    פורסם במקור בפורום CODE613 ב18/05/2017 22:24 (+03:00)

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

      א. באיזה רשומה הוא אוחז בשגיאה?
      ב. למה הטרנזקציה? בשביל מה?
      ג. אני ממש לא מבין מה בכלל לוקח זיכרון בקוד הזה. הdb בכלל לא אמור להתמלא מעבר לload שיש בהתחלה. אולי הקוד פה לא מלא?

      פורסם במקור בפורום CODE613 ב18/05/2017 23:46 (+03:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

      תגובה 1 תגובה אחרונה
      0
      • רחמיםר מנותק
        רחמיםר מנותק
        רחמים מורחק
        כתב ב נערך לאחרונה על ידי
        #3

        @דוד ל.ט.

        א. באיזה רשומה הוא אוחז בשגיאה?
        ב. למה הטרנזקציה? בשביל מה?
        ג. אני ממש לא מבין מה בכלל לוקח זיכרון בקוד הזה. הdb בכלל לא אמור להתמלא מעבר לload שיש בהתחלה. אולי הקוד פה לא מלא?

        א. בין 500 ל 600 אלף הוא קורס
        ב. עשיתי בלי וכל הוספת רשומה לקח 200 מילישניות, ועם טרנזקציה כל הוספה פחות מ1 מילישניות.
        ג. כל הקוד במלאו, מדובר במסד SQLITE אם זה משנה.

        פורסם במקור בפורום CODE613 ב18/05/2017 23:59 (+03:00)

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

          @רחמים

          @דוד ל.ט.

          ג. אני ממש לא מבין מה בכלל לוקח זיכרון בקוד הזה. הdb בכלל לא אמור להתמלא מעבר לload שיש בהתחלה. אולי הקוד פה לא מלא?

          ג. כל הקוד במלאו, מדובר במסד SQLITE אם זה משנה.

          אולי זה יעזור לך
          ב SQLITE בכל פעם שנפתח מסד נתונים, הסריקה כולה מסומנת ומנותחת ועץ ניתוח לסכימה מוחזק בזיכרון. כלומר, זמן ההתחברות של מסד הנתונים ושימוש בזיכרון הראשוני הוא יחסי לגודל הסכימה - מכאן https://www.sqlite.org/limits.html - שורה אחרונה.

          פורסם במקור בפורום CODE613 ב19/05/2017 09:12 (+03:00)

          תגובה 1 תגובה אחרונה
          0
          • רחמיםר מנותק
            רחמיםר מנותק
            רחמים מורחק
            כתב ב נערך לאחרונה על ידי
            #5

            @אבי

            ב SQLITE בכל פעם שנפתח מסד נתונים, הסריקה כולה מסומנת ומנותחת ועץ ניתוח לסכימה מוחזק בזיכרון. כלומר, זמן ההתחברות של מסד הנתונים ושימוש בזיכרון הראשוני הוא יחסי לגודל הסכימה - מכאן https://www.sqlite.org/limits.html - שורה אחרונה.

            כן, אבל למה הזכרון לא משתחרר הרי אני 'סוגר' את הדטה ביס? אני רוצה להגיע למצב כאילו סגרתי את התוכנה לגמרי ופתחתי שוב, מה חסר בקוד שלי? מה הייתי צריך לשחרר ולא שיחררתי? או אולי זה באג פנימי בתוך ה EF או ה SQLITE, אבל קשה לי להאמין.

            פורסם במקור בפורום CODE613 ב19/05/2017 09:29 (+03:00)

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

              הייתי בודק בפרופילר מה לוקח את הזיכרון כדי לדעת בדיוק איפה הבאג, וזה אכן נראה לי באג.

              פורסם במקור בפורום CODE613 ב19/05/2017 09:38 (+03:00)

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

              תגובה 1 תגובה אחרונה
              0
              • C מנותק
                C מנותק
                code.net
                כתב ב נערך לאחרונה על ידי
                #7

                מבלי להכניס את ראשי בין ההרים הגבוהים:
                ממש השבוע שמעתי שיש הבדל אם הsqLite הגישה אליו כקובץ, לבין אם הוא מותקן, בקובץ הוא הרבה יותר איטי ובעייתי.
                לא יודע אם קשור לעניין.

                פורסם במקור בפורום CODE613 ב19/05/2017 11:21 (+03:00)

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

                  @CODE.NET

                  ממש השבוע שמעתי שיש הבדל אם הsqLite הגישה אליו כקובץ, לבין אם הוא מותקן, בקובץ הוא הרבה יותר איטי ובעייתי.

                  לענ"ד אין למשפט זה הבנה, וזה לקוח בטעות מSqlServer שם יש AttachDbFilename שמיועד לצרכי פיתוח בלבד.
                  בsqlite אין מושג של מותקן - תמיד הקובץ הוא מת והמערכת המפעילה אותו זה האפליקציה שמשתמשת בו.

                  פורסם במקור בפורום CODE613 ב19/05/2017 11:28 (+03:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

                  תגובה 1 תגובה אחרונה
                  0
                  • רחמיםר מנותק
                    רחמיםר מנותק
                    רחמים מורחק
                    כתב ב נערך לאחרונה על ידי
                    #9

                    "פתרתי את הבעיה" !!!
                    אותו הקוד בדיוק ללא שום שינוי רק להוסיף בשורה ראשונה MsgBox כך:

                    Private Sub AddListToTree(ByVal list As List(Of Node))
                    
                            MsgBox("")
                    ' כל ההמשך אותו דבר
                    

                    מה קורה פה??
                    גם שמתי לב ש"הפתרון" הזה לא עובד אם מיד שמופיעה ההודעה לוחצים אישור, צריך להמתין איזה 2 שניות ואז ללחוץ אישור ואז הכל עובד חלק.

                    פורסם במקור בפורום CODE613 ב20/05/2017 21:13 (+03:00)

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

                      הזוי.
                      בהכרח שיש תהליך משנה שלא מספיק משהו קודם... משונה לגמרי.
                      אם תעשה פרויקט עצמאי ועובד שהיה בו את הבעיה אשמח לחקור את התופעה הפלאית.

                      פורסם במקור בפורום CODE613 ב22/05/2017 08:49 (+03:00)

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

                      תגובה 1 תגובה אחרונה
                      1
                      • רחמיםר מנותק
                        רחמיםר מנותק
                        רחמים מורחק
                        כתב ב נערך לאחרונה על ידי
                        #11

                        הנה קישור להורדת פרוייקט קטן שמדגים את הבעיה
                        https://magicode.me/send-file/file/83e4669febf62cdf15bfe5858f3135a58b51fa24/view
                        תודה רבה

                        פורסם במקור בפורום CODE613 ב23/05/2017 00:34 (+03:00)

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

                        בא תתחבר לדף היומי!
                        • התחברות

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

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