IEnumerator

gilad g

New member
IEnumerator

גם לי מותר לשאול קצת
: למה להשתמש ב-IEnumerator, ולא בלולאת for רגילה? האם יש לזה יתרונות מבחינת יעילות?
 

Adidi70

New member
בגדול זה לא ממש משנה...

כמו שאתה יודע יש הרבה סוגיות ב .Net שניתנות לפיתרון בכמה דרכים (לכן יש כ"כ הרבה מחלקות) מה שכן לעניות דעתי ל IEnumerator יש כמה יתרונות זניחים. קודם כל הנוחות של המאפיינים שלו לעבודה עם מערך(MoveNext,Currenr,Reset) מה שקצת מזכיר עבודה עם מצביעים ובעיקר עבודה עם מערכים שאתה מתקדם בהם ע"פ סדר כרונולגי שאתה לא יודע מראש (RecordSet זה דוגמא מצוינת למשל) דבר שני אתה יכול לשלוח IEnumerator שלם לפונקציה (מה שיותר נוח מאשר לשלוח מערך) אגב גלעד - למה אתה מעדיף C# על VB.NET ??
 

gilad g

New member
אה הא..

היתרון שלו הוא אך ורק מבחינת הנוחות? האם שימוש ב-IEnumerator יהיה יותר מהיר או איטי משימוש בלולאת for רגילה? או במילים אחרות: האם ל-IEnumerator יש overhead?
 

gilad g

New member
ובקשר ל#C מול VB.NET --

אני מעדיף להשאיר את זה לדיון אחר
 

Adidi70

New member
במחשבים של היום אני לא חושב...

ששיקולים כמו overhead צריכים להילקח בחשבון בטח שלא במקרה הזה ( IEnumerator מול מערך)
 

gilad g

New member
זה ממש לא נכון...

שיקולים כאלו מאוד צריכים להילקח בחשבון . לדוגמא - יש לך מליון רשומות, ועל כל רשומה יש לך Overhead של שניה... זה יוצא מליון שניות, כלומר 277 שעות...! כשמגיעים למספרים גדולים (וברוב המקרים מגיעים למספרים גדולים), ה-overhead-ים הפצפונים האלו הופכים להיות להשהיות ענקיות.
 

Adidi70

New member
חחחח - כל רשומה תקורה של שנייה ??

זה באמת נראה לך הגיוני ?! לא נראה לי שקיים דבר כזה שפעולה אחת ספציפית בקוד לוקחת שנייה שלמה להתבצע - אחרת לכל תוכנית היה לוקח שנים להתבצע! אני אומר לך ואני אומר לך בודאות שבמקרה שלך אם עליך לבחור בין IEnumerator ללולאת For-Next לא יהיו שום הבדלים משמעותיים מבחינת תקורה של התוכנית שלך גם אם זו תוכנית ענקית !! - נסה ותיווכח
 

gilad g

New member
אולי במקרה הספציפי של

IEnumerator לא. אבל זה לא אומר שלא צריך להתייחס לזה בכלל (באופן כללי). גם אם זה לוקח 800 מילישניות (חישובים מאוד מסובכים יכולים לקחת הרבה זמן -- תתפלא) במקום 300 מילישניות, הרי שחסכנו פה הרבה מאוד זמן. performance ויעילות זה אחד הדברים הכי חשובים (אם לא החשוב שבהם) שעל המתכנת לחשוב עליהם בזמן התכנות.
 

yuval k

New member
גלעד נתן overhead כזה גדול כדי

להדגים... אבל גם אם זה 1ms, על מיליון רשומות אתה מקבל overhead של 1000 שניות, והן 16 דקות ו-40 שניות... וזה עדיין הרבה מאוד זמן. חשיבותהּ של יעילות
 

yuval k

New member
../images/Emo26.gif

ראה פה
יש שם דוגמאות לסיטואציות בהן זה יותר טוב מאשר "לולאת for רגילה".
 
למעלה