עברית, עברית, עברית

Zeliran

New member
מה?? מה עשיתי לך??

עוד פעם הרג'יסטרי עושה בעיות יש את הקטע הזה:
RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\The Book Project"); if ( key == null ) { Registry.CurrentUser.CreateSubKey("Software\\txtr\\General"); keyGeneral.SetValue ("Sizable", false); }​
(קיצרתי את כל הקטע של כל הנתונים..) בכל מקרה.. לפני כמה זמן הכל עבד, והיה בסדר, אבל עכשיו משום מה כשאני עושה debug אני מקבל הודעה ש: Additional information: Object reference not set to an instance of an object. בלי ששיניתי שום דבר בקטע הזה..
 

gilad g

New member
המממ

RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\The Book Project"); if ( key == null ) { Registry.CurrentUser.CreateSubKey("Software\\txtr\\General"); keyGeneral.SetValue ("Sizable", false); }​
אתה בטוח שככה זה צריך להיות
 

Zeliran

New member
לא..

לא העתקתי את הכל..., יש לי שורה שבה אני מאתחל אותו..
 

Zeliran

New member
כבר לא חשוב.. מצאתי מה היתה הבעיה..

אבל תודה בכל מקרה
 

Zeliran

New member
טיפים לחיסכון בזיכרון?

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

gilad g

New member
אז ככה ../images/Emo26.gif

א. עבור על כל הקוד של התוכנית שלך, ובדוק כל אובייקט, האם יש לו מתודת Dispose או Close. אם כן, בדוק שקראת למתודה הזאת, כשסיימת לעבוד עם האובייקט. ב. אתה משתמש הרבה בחיבור של סטרינגים? (Concatanation). אם כן, אל תשתמש באופרטור + כדי לחבר אותם, אלא ב-StringBuilder. הסיבה לכך היא שהאופרטור + יוצר instance חדש של הסטרינג אחרי כל חיבור, ואילו ה-stringbuilder הוא הרבה יותר חסכוני (אם תרצה הסבר יותר מפורט, בקש). ג. השתדל להיות GC-Friendly. אם יש אובייקטים שאתה לא צריך, אל תשתמש בהם. השתדל לעשות כמה שפחות הקצאות (Allocations). ד. ממליץ לך לקרוא ל-GC.Collect, כאשר אתה רוצה לומר ל-GC לנקות את הזיכרון. אני הייתי שם את זה בסיום פעולה ארוכה כלשהי (כמו עיבוד ארוך יחסית). ה. להשתמש ב-CLR Profiler (מופיע בקישורי הפורום תחת "כלים"), כדי לבדוק מהו מצב הזכרון של התוכנית שלך בכל זמן נתון. ו. אתה מריץ את התוכנה שלך במצב debug במקרה? אופטימיזציות רבות של ה-JIT נכבות, כאשר עובדים ב-debug ולא ב-release
ז. יש המון המון כתבות ב-MSDN על הקצאות זיכרון, ה-GC, ה-CLR, וכל מה שקשור. קריאה נעימה
 

yuval k

New member
../images/Emo45.gif, ועוד אחת קטנה:

ח. כשאתה מקצה זיכרון, אל תקצה יותר מידי. לדוגמא, אם אתה צריך לשמור מספר בין 0 ל-255, אל תשתמש ב-long, אלא ב-byte: ה-long תופס פי 8 יותר זיכרון מהבייט. זה אמנם לא נראה משמעותי עכשיו, אבל זה בהחלט לא חסר משמעות. כמו כן, רצוי ביותר להשתמש בסוגי המשתנים המתאימים, כלומר - לא להשתמש ב-int כדי לשמור ערכי 0/1 (בשביל זה יש את ה-bool), לא להשתמש במחרוזת בשביל לאחסן מספר (איטית יותר בעיבוד, וכמובן ששוקלת יותר בזיכרון) וכו' - אבל זה טריוויאלי
 

Zeliran

New member
יצירת Event ל ListView

איך אפשר ליצור event ללחיצה על פריט מסוים ב listview? וכיצד אני יכול לדעת איזה פריט נלחץ?
 

Zeliran

New member
שאלת תאימות

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

yuval k

New member
יוכלו לרוץ, אם יש CLR מתאים ../images/Emo13.gif

ללינוקס יש - mono. אני לא יודע מה יקרה לאפליקציות שמשתמשות ב-Registry... סביר שזה לא יעבוד כמו שצריך. אבל לא ניסיתי, אז איני יודע
 

Zeliran

New member
אפשר?

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