memory leak ב- COM

ScrollLock

New member
memory leak ב- COM

OK, שאלה בעזרה... הנתונים: 1. אפליקצית client-server (מול אורקל 8.1.7 אם זה ממש משנה...) שמשמשת גם כשרת COM. מולה (מול ה-client), רצה כ-client אפלקצית web שמתבססת על ה-COM. 2. סביבת הפיתוח היא Delphi מה ששולל על הסף שימוש בכלים של מרקורי (התמיכה שלהם ב-Delphi היא חלקית מאוד!) הבעייה: ככל הנראה, עקב "סימפטומים לא מזוהים" שהגיעו מלקוחות, יש חשש ל-memory leak מה-COM עצמו. תלונת הלקוח היא שאחרי שימוש ממושך באפליקצית ה-WEB, התחנה שהיא שרת ה-COM מראה ביצועים גרןעים מאוד ובבדיקה - אין זיכרון פנוי, רוב הזיכרון נמצא בשימוש ע"י האפליקציה שלנו. בבדיקה שעשינו אצלנו, אפליקצית ה-WEB נקייה לחלוטין מבעיות (למשל memory leaks?) ובסך הכל זה די הגיוני - היא לא עושה הרבה. היא בסה"כ מתממשקת ל-COM. השאלה: איך מאתרים memory leaks שמקורן ב-COM? ("זה עוד לא עשו..."). הכוונה היא ל-COM עצמו ולא לכל האפליקציה.
 

JohnDoe5

New member
זה תלוי

אם יש אפשרות לדבג את רכיבי ה-COM. אם אתם גם כתבתם את רכיבי ה-COM ניתן לדבג אותם בזמן שדפי ה-WEB פונים אליהם (התוכניתנים שלכם אמורים לדעת לעשות את זה). אם אין גישה לקוד של ה-COM, אז זה כבר בעיה (בשביל זה יש את יצרני הרכיבים שאמורים לדעת שאין להם זליגות זכרון) - אתם יכולים להתקשר לספק הרכיבים ולנסות להסביר לו מתי קורות הזליגות בשביל שהוא יוכל לבדוק את זה. לגבי הזליגה עצמה - אם מדובר ברכיבים שנכתבו ב-VB זה לא מפליא כי VB ידוע בזליגות הזכרון שלו. לגבי ++C זה אפשרי אם התוכניתנים לא שחררו זכרון כמו שצריך (אבל זה כבר באחריותם לבדוק).
 

JohnDoe5

New member
ולשאלתך...

"זה עוד לא עשו" - אז דווקא כן. במהלך פרויקטים שביצעתי בתקופת הצבא, כאשר השתמשנו ברכיבי COM (גם VB וגם ++C) יצא לנו לא מעט לדבאג אותם בשביל למצוא חריגות וזליגות זכרון.
 

ScrollLock

New member
תוכל לפרט קצת איך בדקתם?

אני כרגע מנסה לבדוק את האפליקציה בזמן שמבוצעות אליה גישות מה-COM. זה הכיוון?
 

JohnDoe5

New member
תלוי בסביבה

ברוב הסביבות ניתן להריץ את האפליקציה לדיבאג (בסביבת הפיתוח) ואז כאשר יבוצעו אליה פניות משרת ה-WEB, האפליקציה תכנס לדיבאג וניתן יהיה לדבאג אותה. אם מדובר ברכיב COM המותקן ב-MTS, צריך לנטרל טרם הפעלת המערכת את היותו ב-MTS, מאמרים על איך עושים את זה ניתן למצוא בעזרה של מיקרוסופט (MSDN) - יש איזשהו כיוון מיוחד לדיבאג שזמנית מוציא את רכיב ה-COM מה-MTS
 
למעלה