none
בעיית זיכרון בעת כתיבה לxml ב vb.net

    שאלה

  • שלום,

    אני כותבת ב vb.net ב- console application

    אני כתבתי תוכנה שכל 3 דקות או דקה (טיימר) כותבת ל- xml 

    הכתיבה ל- XML נעשית באופן הבא:

    אני מוחקת את כל מה שהיה שם (ב- XML )

    ולוקחת רשימה של מחלקה שאני יצרתי, ועוברת על איבר ברשימה  וממירה אותו ל-XElement ומוסיפה ל-xml.

    הבעיה היא משמידי כמה שעות התכנה מפסיקה להגיב ואני רואה שהיא תקועה על השורה  Console.ReadLine()

    ואין לי מושג ממה נובעת הבעיה, אולי זה מההמרה  ל-XElement  שכל הזמן מתבצעת.

    אני מצרפת כאן את הקוד של המעבר על הרשימה והכתיבה ל- xml

    אשמח שתעזרו לי לנפות את מקור הבעיה.

    תודה

        Public Sub updateXml()
            xml.deleteAllInRoot()
            For Each item In allPatient
                item.writeToXml()
    
            Next
    
        End Sub
    
        Public Sub writeToXml()
    
            xml.insertItem(convertToXml())
        End Sub
    
      Public Function convertToXml() As XElement
    
            Dim xe As XElement = New XElement("Call")
            xe.Add(New XElement("dline1", dline1))
            xe.Add(New XElement("Room", Room))
            xe.Add(New XElement("diaryName", diaryName))
            xe.Add(New XElement("specialization", specialization))
            xe.Add(New XElement("Name", Name))
            xe.Add(New XElement("ID", ID))
            xe.Add(New XElement("dtime", dtime))
            Return xe
    
        End Function
    
        Public Function insertItem(item As XElement)
         
            Dim doc2 As XDocument = XDocument.Load(FilePath)
            Dim r As XElement = doc2.Element(rootName)
            r.Add(item)
    
            doc2.Save(FilePath)
    
    
        End Function


    יום שני 11 יוני 2018 06:01

תשובות

  • אהלן,

    1. את אומרת שהריצה נתקעת ב Console.ReadLine אבל לא סיפקת לנו את החלק הזה שהוא הרלונטי 

    2. בזמן שהריצה נתקעת את צריכה לנטר משאבי מערכת ולהבין היכן צוואר הבקבוק

    3. את יכולה לפתוח פרוייקט test ולנטר משאבים לפני הפקודה שתוקעת. את יכולה להציג את המצב ולעלות על המגבלות של המערכת - זה יעזור למצוא פתרון

    4. האם חשבתי לשנות את הגישה מהבסיס?

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

    אני מצי לבדוק אפשרויות נוספות לתכנון המערכת ובמקביל לספק לנו מידע מלא יותר על הקוד ועל הניטור של המערכת


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]

    יום חמישי 14 יוני 2018 00:45
    מנחה דיון
  • שלום,

    ראשית כל חשוב לי לציין שאני לא יכולה לעבוד עם מסד נתונים.

    כי כל המטרה של התוכנית זה לערוך טסטים לתוכנית אחרת שקוראת מ-xml (ואין לי יכולת לשנות אותה)

    והמטרה של תוכנית העזר זה להכניס נתונים ל- xml לפי דרישות מסוימות ואין לי בררה אלא להחליף את הנתונים של ה-xml כל כמה דקות.

    והייתי שמחה לקבל הסבר על הפתרונות הללו שנתתם לי:

     2. בזמן שהריצה נתקעת את צריכה לנטר משאבי מערכת ולהבין היכן צוואר הבקבוק. מה פרוש לנטר משאבי מערכת?

    3. את יכולה לפתוח פרוייקט test ולנטר משאבים לפני הפקודה שתוקעת. את יכולה להציג את המצב ולעלות על המגבלות של המערכת - זה יעזור למצוא פתרון.

    היי,

    2. לגבי ניטור:

    monitoring and evaluation
    http://www.endvawnow.org/en/articles/330-what-is-monitoring-and-evaluation-.html

    ניטור הוא תהליך של איסוף מידע על המערכת בזמן הריצה. בדיקת המשאבים בהם המערכת שלנו (האפליקציה שלך) עושה שימוש. למשל כמה זכרון וכמה מעבד. אפשר לעבוד עם Perfmon לצורך העניין או עם תכנות ניטור בתשלום.

    3. לגבי Test: הכוונה למשל לעבוד עם Unit Tests
    https://msdn.microsoft.com/en-us/library/ms182532.aspx

    שוב פעם מדובר על ניטור בעזרת פרוייקט Test


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]


    יום חמישי 14 יוני 2018 16:01
    מנחה דיון

כל התגובות

  • אהלן,

    1. את אומרת שהריצה נתקעת ב Console.ReadLine אבל לא סיפקת לנו את החלק הזה שהוא הרלונטי 

    2. בזמן שהריצה נתקעת את צריכה לנטר משאבי מערכת ולהבין היכן צוואר הבקבוק

    3. את יכולה לפתוח פרוייקט test ולנטר משאבים לפני הפקודה שתוקעת. את יכולה להציג את המצב ולעלות על המגבלות של המערכת - זה יעזור למצוא פתרון

    4. האם חשבתי לשנות את הגישה מהבסיס?

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

    אני מצי לבדוק אפשרויות נוספות לתכנון המערכת ובמקביל לספק לנו מידע מלא יותר על הקוד ועל הניטור של המערכת


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]

    יום חמישי 14 יוני 2018 00:45
    מנחה דיון
  • שלום,

    ראשית כל חשוב לי לציין שאני לא יכולה לעבוד עם מסד נתונים.

    כי כל המטרה של התוכנית זה לערוך טסטים לתוכנית אחרת שקוראת מ-xml (ואין לי יכולת לשנות אותה)

    והמטרה של תוכנית העזר זה להכניס נתונים ל- xml לפי דרישות מסוימות ואין לי בררה אלא להחליף את הנתונים של ה-xml כל כמה דקות.

    והייתי שמחה לקבל הסבר על הפתרונות הללו שנתתם לי:

     2. בזמן שהריצה נתקעת את צריכה לנטר משאבי מערכת ולהבין היכן צוואר הבקבוק. מה פרוש לנטר משאבי מערכת?

    3. את יכולה לפתוח פרוייקט test ולנטר משאבים לפני הפקודה שתוקעת. את יכולה להציג את המצב ולעלות על המגבלות של המערכת - זה יעזור למצוא פתרון.

    יום חמישי 14 יוני 2018 10:31
  • שלום,

    ראשית כל חשוב לי לציין שאני לא יכולה לעבוד עם מסד נתונים.

    כי כל המטרה של התוכנית זה לערוך טסטים לתוכנית אחרת שקוראת מ-xml (ואין לי יכולת לשנות אותה)

    והמטרה של תוכנית העזר זה להכניס נתונים ל- xml לפי דרישות מסוימות ואין לי בררה אלא להחליף את הנתונים של ה-xml כל כמה דקות.

    והייתי שמחה לקבל הסבר על הפתרונות הללו שנתתם לי:

     2. בזמן שהריצה נתקעת את צריכה לנטר משאבי מערכת ולהבין היכן צוואר הבקבוק. מה פרוש לנטר משאבי מערכת?

    3. את יכולה לפתוח פרוייקט test ולנטר משאבים לפני הפקודה שתוקעת. את יכולה להציג את המצב ולעלות על המגבלות של המערכת - זה יעזור למצוא פתרון.

    היי,

    2. לגבי ניטור:

    monitoring and evaluation
    http://www.endvawnow.org/en/articles/330-what-is-monitoring-and-evaluation-.html

    ניטור הוא תהליך של איסוף מידע על המערכת בזמן הריצה. בדיקת המשאבים בהם המערכת שלנו (האפליקציה שלך) עושה שימוש. למשל כמה זכרון וכמה מעבד. אפשר לעבוד עם Perfmon לצורך העניין או עם תכנות ניטור בתשלום.

    3. לגבי Test: הכוונה למשל לעבוד עם Unit Tests
    https://msdn.microsoft.com/en-us/library/ms182532.aspx

    שוב פעם מדובר על ניטור בעזרת פרוייקט Test


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]


    יום חמישי 14 יוני 2018 16:01
    מנחה דיון
  • שלום,

    תודה על הרעיון של הניטור זה אכן עזר לי,

    גיליתי כי כאשר מתבצעות הרבה גישות ל xml בזמן קצר מאד אז זה מאד מעמיס על התוכנה,

    מה שעשיתי זה 

    1. שניתי את התיימר שמפעיל את הטעינה והעדכון של ה- xml שיתבצע כל 7 דקות ולא כל 2 דקות.

    2. תיקנתי את הפונקציות גישה ל- xml שיהיו כמה שפחות גישות וטעינות של ה-xml 

    יום חמישי 21 יוני 2018 08:29
  • שמח לשמוע :-)

    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]

    יום חמישי 21 יוני 2018 12:07
    מנחה דיון