يكي از مواردي كه بعضي از همكاران هنگام ارائه برنامههاي خود رعايت نميكنند، تفاوت قائل نشدن بين حالت release و debug در زمان كامپايل پروژه، براي ارائه نهايي است.
هنگام استفاده از حالت release ، گزينههاي بهينه سازي كامپايلر فعال شده و همچنين debug symbols از اسمبلي نهايي توليد شده حذف ميگردد (بنابراين حجم اسمبلي نهايي نيز كمتر خواهد شد). لازم به ذكر است در حالت release ، ميزان مصرف حافظه برنامه توليد شده نيز كمتر از حالت debug خواهد بود. گاهي از اوقات سرعت اجراي اين دو حالت تا چندين برابر در بعضي از الگوريتمها ميتوانند متفاوت باشند.
مطابق مستندات موجود، وجود debug symbols هيچگونه تاثيري بر روي كارآيي يك برنامه دات نت ندارند.
لازم به ذكر است كه عمده بهينهسازيها در دات نت توسط JIT compiler صورت ميگيرد (تا 99 درصد) و نه توسط كامپايلر زبان مورد استفاده (به همين جهت است كه عدهاي اعتقاد دارند در نهايت و هنگام اجرا تفاوتي مابين زبانهاي مختلف دات نت وجود نخواهد داشت). بر روي JIT compiler نيز ميتوان تاثير گذاشت و نحوه عملكرد آنرا تغيير داد (حتي بر روي يك اسمبلي كامپايل شده). براي مثال يك فايل ini كنار اسمبلي پروژه خود ايجاد كنيد (xyz.ini كه در اينجا xyz.exe نام فايل اجرايي برنامه است). محتويات اين فايل ميتواند به صورت زير باشد:
[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0
در دات نت فريم ورك 2 ، TrackingInfo مربوط به JIT compiler همواره توليد خواهد شد اما ميتوان بر روي بهينه سازي نهايي به صورت فوق نيز تاثيرگذار بود.
نكته:
اگر ميخواهيد هنگام مشاهده گزارش خطا، شماره سطر مورد نظر نيز در كدهاي شما گوشزد شود فايلهاي pdb - program database توليد شده را هم ارائه دهيد. حال شايد بخواهيد هم برنامه را در حالت release ارائه دهيد و هم pdb آن توليد شود، در اين حالت بايد خط فرمان كامپايل برنامه، با سوئيچ debug:pdbonly/ اجرا شود.
اين مورد را در قسمت خواص پروژه، گزينه build و با كليك بر روي دكمه advanced نيز ميتوان تنظيم نمود. (حالت پيش فرض release در VS.Net است)
خلاصهي كلام: لطفا هنگام ارائه نهايي، گزينه release را از بالاي صفحه در VS.Net انتخاب كنيد. با تشكر!