DCSIMG
Question from Tapuz .Net forum: Speeding up builds with many projects - Justin myJustin = new Justin( Expriences.Current );

Question from Tapuz .Net forum: Speeding up builds with many projects

שאלה:

יש לי Solution שמכיל בתוכו 15 projects. חלק גדול מהזמן אני לא צריך לקמפל מחדש 4 פרוייקטים מתוך ה solution.
האם ישנה דרך לבטל קימפול חלק מהפרוייקטים כשאני עושה rebuild ל solution?

 

תשובה:

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

אם הארכיטקטורה שלך היא "עלים של Top tier" אז תוכל להריץ רק את המסלול הרלוונטי לך.
כלומר, אם ה-Solution שלך חושף מספר "שכבות עליונות" (כגון GUI של Winforms, בנוסף Webservice ובנוסף אתר אינטרנט) שביניהם אין תלוית Build יש אפשרות רק להריץ את החלק הרלוונטי מה-Solution (רק האתר, או רק ה-WS או רק האפליקציה החלונאית).
בשביל זה, תוכל ללחוץ כפתור ימני ב-Solution Explorer על הפרוייקט העליון ביותר שאתה רוצה להריץ, ותבחר Debug --> Start new instance. וזה ידאג רק לבנות את הפרוייקטים הרלוונטים שהשתנו להרצה הזו.

image

 

אפשרות לבצע Extension לאפשרות הקודמת היא גם לכתוב Macro קטן שיריץ Start New Instance של הפרוייקט לפי השם שלו, ולחבר את זה לקיצור מקלדת כלשהו. (כדי למנוע את העבודה המיותרת עם העכבר)

אם הארכיטקטורה שלך לא מאפשרת את זה, זה פחות או יותר כאן נגמרות האפשרויות.
יש הרבה מאוד טריקים זולים ל-Build Optimization, אבל רובם לא יקזזו יותר מ-10% מזמן ה-Build וביחד אולי במצב אופטימלי תגיע לשיפור של 25%. זניח יחסית.

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

הנתון שנהוג להביט עליו כאן הוא RPM (כמות סיבובים) של ההארד-דיסק. מעט מאוד זה 4200, מעט זה 5400 וסביר זה 7200.
הכי הרבה שיש בלאפטופ הוא 7,200RPM.
במחשבי PC אפשר לשים גם הארד-דיסק של 10,000RPM.

אפשרות נוספת היא לקנות RAM Disk קטן (של עד 4\8 גיג'ה שזה יחסית זול) ולאחסן שם רק קבצי פרוייקטים.
המהירות קריאה וכתיבה מההארד-דיסקים האלו הן מטורפות ובמקום "להרחיב" את הצוואר בקבוק (שזה מה שמקבלים משדרוג RPM) כאן הוא נעלם לחלוטין.

בפרוייקטים בסדר גודל ענק יש עוד המון צווארי בקבוק.
כאן כבר הקומפיילר יכול להתחיל לטחון את ה-CPU, כמות המידע יכולה לטחון את ה-RAM וכך הלאה.
הפתרון הנפוץ כאן הוא לשים מכונה חזקה שעושה Contentious Integration ושבונה את כל הפרוייקט וככה אתה מקבל פרוייקט שתוכל לבצע Build באמצעות Start New Instance רק את לפרוייקטים שרלוונטים לך.

 

קישור: http://www.tapuz.co.il/tapuzforum/main/Viewmsg.asp?forum=831&msgid=110841667

Published Monday, December 31, 2007 12:22 PM by Justin-Josef Angel [MVP]

Comments

No Comments