PDA

View Full Version : ایجاد اشیاء در زمان اجرا و پیشنهاد چگونگی مدیریت این اشیا



ali_autumnal
جمعه 05 شهریور 1389, 12:18 عصر
باسلام

لطفا فایل ضمیمه رو دانلود کنید و به سورس اون توجه کنید.

سوال:
آیا در پروژه های بزرگ، تعدادی از اشیا یا همه اشیاء باید در زمان اجرا ایجاد شود؟

بله: چگونه اشیاء در زمان اجرا را مدیریت کنیم؟ و چه راه حل هایی پیشنهاد می کنید؟

آیا برای مدیریت اشیاء ایجاد شده در یک رویدادی بایستی قبلا آرایه ای بصورت عمومی از Control ها تعریف کنیم تا در صورت نیاز به آنها به این شکل دسترسی داشته باشیم؟

خیر: در غیر اینصورت چرا سرعت برنامه کم میشود؟ که حتی با ایجاد فقط یک لیبل اضافی در سرعت برنامه تاثیر بسزایی دارد؟

موفق باشید
علی پاییزی

arian_sh3
جمعه 05 شهریور 1389, 13:39 عصر
سلام.
دوست عزیز راستش کاری کردین برام خیلی جالب بود و تا به حال در هیچ کدی ندیدم این روش رو...
با توجه به حجم زیاد فراخوانی ها در هر روال و کار با شئ ها بعید نیست سرعت کاهش پیدا کنه.
مدیریت اشیائ یه مقداری بحثش طولانی هست بهتون پیشنهاد میکنم مرجع کامل C# 2008
نوشته ی christian nagel - bill evjan - jay glynn- morgan skinner - karli watson ترجمه ی احمد پهلوان فتحی و آرزو و آزاده سر خیلی رو مطالعه کنید.
در زمان طراحی کلاس ها اگر کمی دقت کنید و دقیقا بدونید .net در چه زمان های زباله روبی میکنه فکر نکنم نیازی به این حجم کار برای اشیائ باشه...
اگر منظورتون رو درست فهمیده باشم ...

ali_autumnal
شنبه 06 شهریور 1389, 21:27 عصر
سلام.
دوست عزیز راستش کاری کردین برام خیلی جالب بود و تا به حال در هیچ کدی ندیدم این روش رو...
با توجه به حجم زیاد فراخوانی ها در هر روال و کار با شئ ها بعید نیست سرعت کاهش پیدا کنه.
مدیریت اشیائ یه مقداری بحثش طولانی هست بهتون پیشنهاد میکنم مرجع کامل C#‎ 2008
نوشته ی christian nagel - bill evjan - jay glynn- morgan skinner - karli watson ترجمه ی احمد پهلوان فتحی و آرزو و آزاده سر خیلی رو مطالعه کنید.
در زمان طراحی کلاس ها اگر کمی دقت کنید و دقیقا بدونید .net در چه زمان های زباله روبی میکنه فکر نکنم نیازی به این حجم کار برای اشیائ باشه...
اگر منظورتون رو درست فهمیده باشم ...

اما واقعا در سرعت اجرای برنامه تاثیر بسزایی داره!
ما بعضی از اشیاء رو در فرم در لحظه لود ایجاد میکنیم که واقعا همون لحظه بهش نیازی نداریم.
ویا در طول اجرای برنامه خیلی کم به این اشیاء مراجعه می کنیم.

ali_autumnal
یک شنبه 07 شهریور 1389, 22:41 عصر
دوستان نظری پیشنهادی ندارید؟

ali.aghdam
دوشنبه 08 شهریور 1389, 03:33 صبح
سوال:
آیا در پروژه های بزرگ، تعدادی از اشیا یا همه اشیاء باید در زمان اجرا ایجاد شود؟

بله: چگونه اشیاء در زمان اجرا را مدیریت کنیم؟ و چه راه حل هایی پیشنهاد می کنید؟

آیا برای مدیریت اشیاء ایجاد شده در یک رویدادی بایستی قبلا آرایه ای بصورت عمومی از Control ها تعریف کنیم تا در صورت نیاز به آنها به این شکل دسترسی داشته باشیم؟

خیر: در غیر اینصورت چرا سرعت برنامه کم میشود؟ که حتی با ایجاد فقط یک لیبل اضافی در سرعت برنامه تاثیر بسزایی دارد؟

دوست عزیز اشیائی مانند تکست باکس یا کومبو باکس حافظه ای رو به خودشون تخصیص نمی دن که شما به فکر آزاد کردنشون باشید بلکه اطلاعاتی که درون برنامه داریم می تونه خطرناک باشه مثلا یه سرچ بکنی بعد اطلاعاتشو بریزی تو گرید ویو و همه ی اونارو نگه داری!و اگه تو برنامه تون با اضافه کردن یک لیبل سرعت میاد پایین علت چیز دیگست

به نظر من اصلا این کار شما درست نیست و کد نویسی رو به طرز شدیدی افزایش می ده با تأثیر کم!
مثلا من دارم یه پروژه می نویسم (فید خوان) که رابط کاربریشو با WPF و منوشو با Ribbon طراحی می کنم و اگه حساب کنم در زمان اجرا حدود 200 شی مربوط به رابط کاربری ایجاد میشه ولی سعی کردم آبجگت های اضافی رو که پشت صحنه دارم ازش استفاده می کنم رو به موقع خودمDispose کنم (پیاده سازی IDisposable)
اگه می خوای مدیریت حافطه قوی داشته باشی برو سراغ اگوهای شئ گرایی(Design Pattern) مثل تو این برنامه من ازالگوی Flyweight چند بار استفاده کردم

ali_autumnal
چهارشنبه 24 شهریور 1389, 10:01 صبح
دوست عزیز اشیائی مانند تکست باکس یا کومبو باکس حافظه ای رو به خودشون تخصیص نمی دن که شما به فکر آزاد کردنشون باشید بلکه اطلاعاتی که درون برنامه داریم می تونه خطرناک باشه مثلا یه سرچ بکنی بعد اطلاعاتشو بریزی تو گرید ویو و همه ی اونارو نگه داری!و اگه تو برنامه تون با اضافه کردن یک لیبل سرعت میاد پایین علت چیز دیگست

به نظر من اصلا این کار شما درست نیست و کد نویسی رو به طرز شدیدی افزایش می ده با تأثیر کم!
مثلا من دارم یه پروژه می نویسم (فید خوان) که رابط کاربریشو با WPF و منوشو با Ribbon طراحی می کنم و اگه حساب کنم در زمان اجرا حدود 200 شی مربوط به رابط کاربری ایجاد میشه ولی سعی کردم آبجگت های اضافی رو که پشت صحنه دارم ازش استفاده می کنم رو به موقع خودمDispose کنم (پیاده سازی IDisposable)
اگه می خوای مدیریت حافطه قوی داشته باشی برو سراغ اگوهای شئ گرایی(Design Pattern) مثل تو این برنامه من ازالگوی Flyweight چند بار استفاده کردم


اقا دستت درد نكنه.
اگه pdf اي چيزي Document اي داري بزار استفاده كنيم.

ali.aghdam
یک شنبه 28 شهریور 1389, 18:08 عصر
دوست عزیز چون من به کپی رایت اعتقاد دارم نمی تونم بهت لینک وارز بدم ولی اگه دنبال کتاب فارسی هستی کتاب آقای نصیری به نام الگوهای شئ گرایی در C# بدنیست (یه ترجمه خوبه) ولی اگه انکلیشت خوبه کتاب مرجع این کتاب یعنی GoF Design pattern رو می تونی پیدا کنی البته من خودم همیشه بیشتر الگوها رو از WikiPedia پیدا و مطالعه میکنم.

موفق باشی

mohsen_csharp
یک شنبه 28 شهریور 1389, 18:47 عصر
با سلام
به نظر بنده این روش اصلا مناسب نیست زیرا
1 - وقتی در designer فرم ، در متد InitializeComponent اشیای داخل فرم مقداردهی می شود در ابتدا و انتهای آن SuspendLayout و ResumeLayout انجام می گیرد که باعث افزایش سرعت ایجاد اشیا می گردد
2 - این عملیات تنها یک بار ایجاد می شود ولی در روش شما بارها ممکن است این عملیات تکرار شود
3 - بیشترین سنگینی ایجاد یک شی گرافیکی مانند کنترل های فرم ، مربوط به Paint آن شی می باشد.
در حالت عادی این عملیات زمان کمتری می برد چون هنوز فرم نمایش داده نشده ولی در روش شما این عملیات زمان گیر خواهد بود چون روی فرمی که ظاهر می باشد این اشیا ترسیم می گردند.