'System.OutOfMemoryException'.
-
יש לי תכנה שמחזיקה בזכרון החי אינדקסים של כ21 ספרים,
עד עכשיו זה לא זרק לי את החריג הנ"ל, רק לקח לאינדקסים כ2 דקות להטען.
עכשיו זה זורק לי את החריג כבר כשהאינדקסים מנסים להטען.
(יש לציין שעד עכשיו האינדקסים היו שמורים בצורה בינארית (ככה שהם תפסו הרבה פחות מקום..), ועכשיו הם שמורים בתור קבצי JSON.
כמו כן, בResources של התכנה אני מגדיר שיטען לי אותם כבר כסטרינגים. אולי זה גם מכביד עליו? למרות שאחרת - אני אמור לעשות זאת..)
כמו כן, כשניסיתי לבנות אינדקס אחד של כל הספרים - אז כל הזמן קיבלתי את החריג הזה :oops: (לאחר שהאינדקס נוצר, החריג נזרק בזמן הסריליזציה).
משיטוט בגוגל לא מצאתי לי מנוח..
ראיתי שכותבים שכיבוי והפעלה של המחשב עוזרים לפעמים.
כמו כן, הוספתי בקונפיג את הפקודה הבאה (כדי לאפשר משתנים גדולים):<runtime> <gcAllowVeryLargeObjects enabled="true" /> </runtime>
מה עוד אפשר לעשות?
מישהו נתקל בזה פעם?
תודה רבה!פורסם במקור בפורום CODE613 ב09/06/2016 00:28 (+03:00)
-
אולי זה?
http://stackoverflow.com/a/17322112פורסם במקור בפורום CODE613 ב09/06/2016 01:01 (+03:00)
-
@םןץףך
אולי זה?
http://stackoverflow.com/a/17322112זה בדיוק 2 הדברים שניסיתי כבר
פורסם במקור בפורום CODE613 ב09/06/2016 01:04 (+03:00)
-
@םןץףך
איזה גודל האינדקסים? למה לטעון אותם לזיכרון? חושבני שזה מיותר.
אולי תחלק אותם לכמה משתנים.סה"כ כולם יחד שוקלים 551 מ"ב.
אבל הם מחולקים ל21 קבצים, שהגדול שבהם שוקל 101 מ"ב.
הם צריכים להיות חיים בזיכרון - כדי לאפשר למשתמש חיפוש מהיר ומתקדם.
לא נראה לי שייך לחלק אותם לכמה משתנים, כי כל אינדקס מפנה למילים שנמצאים באותו ספר.פורסם במקור בפורום CODE613 ב09/06/2016 01:09 (+03:00)
-
צודקים! רק בזכות השאלות שלכם בדקתי וקלטתי שאני טוען חצי ג'יגה לזכרון, וזה קצת מיותר..
וגם לוקח הרבה זמן עד שהכל נטען, דבר שפוגע בחוויות המשתמש :shock:
אתן קצת פרטים ורקע:
אני משתמש בVS 2015 Comunity Update 2 , יש לי את הDiagnostic (הגראפים האלה שרצים בצד ימין למעלה?!), רק אין לי מושג איך משתמשים בו :?
לכל ספר אני בונה אינדקס שמכיל Dictionary של כל המילים שמופיעים בספר, וכל מילה - מכילה ליסט של כל המופעים שלה באותו ספר. (על כל מילה אני שומר הרבה מידע על המיקום שלה (כגון באיזה פרק, פסקה, תת-פסקה - היא נמצאת. מה מיקום המילה מתחילת הספר, ומתחילת הפסקה, מה מיקום התו הראשון במילה (שוב גם כאן - מתחילת הספר, ומתחילת הפסקה). יכול להיות שבאמת זה מיותר ואין צורך בכל הדברים הללו, ובטח זה יוריד לי את הנפח של האינדקס..מה שעשיתי עד היום היה לטעון את כל קבצי הJSON של האינדקסים לתוך מערך של סטרינגים, אח"כ להמיר את כולם לאובייקטים של האינדקס, כך שיהיו זמינים לחיפוש מהיר. דבר שכמובן לקח הרבה זמן עד שהחיפוש היה מוכן לשימוש (במחשב מהיר כשלי עם כונן SSD ומעבד I5 לקח לו כדקה, במחשבים פשוטים יותר - יותר מ2 דקות..)
עכשיו שיניתי את זה, שבתחילה יטענו קבצי הJSON לתוך מערך הסטרינגים (במחשב שלי כ3 שניות), וכאשר המשתמש בוחר ספר לחיפוש - הוא ממיר את הסטרינג הנדרש לאובייקט של אינדקס, ומחפש בו. כל זמן שהוא לא בחר בספר אחר - האינדקס הנ"ל ממשיך לחיות, וכאשר הוא בוחר באינדקס אחר - האינדקס הנבחר נטען, והשני נדרס. (קודם אני מציב במשתנה NULL כדי לשחרר אותו, ואח"כ טוען לתוכו את האינדקס מהסטרינג).
אכן זה משפר פלאים את מהירות טעינת התכנה, ואת המוכנות של ממשק החיפוש.עכשיו שיניתי שהוא לא טוען כלום בהתחלה, ורק כשהמשתמש בוחר לחפש - הוא טוען את הJSON הספציפי לסטרינג וממיר אותו לאובייקט, ובא לציון גואל.
פורסם במקור בפורום CODE613 ב09/06/2016 14:59 (+03:00)