PDA

View Full Version : پیاده سازی بهتر و صحیح تر برنامه ها



sorrowdancer
پنج شنبه 12 مهر 1386, 14:08 عصر
از آنجا که نحوه پیاده سازی دستورات نقش مهمی در سرعت و دقت خروجی دارد، بنا دیدم در این تاپیک به بحث در این زمینه بپردازیم.

از دوستان می خواهم در هر موردی که صلاح می بینند روش نادست و روش بهتر را بیان کنند.
و تمامی روش ها نادرست را ممکن است من نوعی انجام دهم، درنتیجه از بیان هر مطلبی اجتناب نکنید.

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

sorrowdancer
پنج شنبه 12 مهر 1386, 14:10 عصر
به عنوان اولین سوال:

روش صحیح بستن برنامه چیست؟

Terminate Halt Close و یا .. ؟

و آیا متغیرهای موجود در برنامه با بستن آن به طور کامل آزاد می شوند؟

vcldeveloper
پنج شنبه 12 مهر 1386, 16:44 عصر
روش صحیح بستن برنامه چیست؟

Terminate Halt Close و یا .. ؟
http://barnamenevis.org/forum/showthread.php?t=22437
http://barnamenevis.org/forum/showthread.php?t=3746

sorrowdancer
جمعه 13 مهر 1386, 00:09 صبح
آیا با وجود خاصیت ذخیره یک مقدار عددی در tag هر کامپوننت آیا صحیح می بینید که متغیری از نوع صحیح تعریف و از آن استفاده کنیم؟

vcldeveloper
جمعه 13 مهر 1386, 11:38 صبح
آیا با وجود خاصیت ذخیره یک مقدار عددی در tag هر کامپوننت آیا صحیح می بینید که متغیری از نوع صحیح تعریف و از آن استفاده کنیم؟
بستگی داره اون متغیر برای چه کاری استفاده بشه. اگر من یک متغیر برای شمارش میخوام، اصلا جالب نیست از Tag یک Form برای آن استفاده کنم. کسی که سورس را می خونه، باید مدتی وقت بزاره که بفهمه از Tag برای چی استفاده شده.

sorrowdancer
جمعه 13 مهر 1386, 13:31 عصر
آیا تنظیم خاصیت های کامپوننت ها به صورت دستی در رویداد OnCreate بهتر است یا تنظیم آن خاصیت در Pad Properties اون کامپوننت ؟ یا اینکه اصلا فرقی نداره؟

از نظر خوانایی فکر کنم OnCreate بگیم بهتر هست می خوام ببینم سرعت لود فرقی باهم دارند؟

با تشکر

SYNDROME
جمعه 13 مهر 1386, 13:51 عصر
با سلام


آیا تنظیم خاصیت های کامپوننت ها به صورت دستی در رویداد OnCreate بهتر است یا تنظیم آن خاصیت در Pad Properties اون کامپوننت ؟ یا اینکه اصلا فرقی نداره؟

زمانی که شما به صورت دستی در OnCreate تنظیم می کنید اولا تعداد خطوط برنامه را زیاد می کنید.
مصلماً هر چه تعداد خطوط برنامه بیشتر باشد سرعت کامپایل و اجرای برنامه پایین می آید.
ولی در بعضی از موارد شما مجبور هستید این تنظیمات را خودتان با کد نویسی انجام دهید.
موفق باشید

sorrowdancer
جمعه 13 مهر 1386, 15:50 عصر
اگر در Uses توابع و فرم هایی باشد که در آن فرم استفاده نشود یعنی آن را فراخوانی نکرده باشیم و تنها Use شده باشند آیا در حجم برنامه تأثیر دارد؟

SYNDROME
جمعه 13 مهر 1386, 16:29 عصر
با سلام


اگر در Uses توابع و فرم هایی باشد که در آن فرم استفاده نشود یعنی آن را فراخوانی نکرده باشیم و تنها Use شده باشند آیا در حجم برنامه تأثیر دارد؟

Unitهایی که در قسمت Uses مورد استفاده قرار می گیرند در هنگام اجرای فرم با فرم ما Load می شوند و اگر شما نیازی به آنها ندارید بهتر است آنها را پاک کنید.
موفق باشید

vcldeveloper
شنبه 14 مهر 1386, 00:31 صبح
آیا تنظیم خاصیت های کامپوننت ها به صورت دستی در رویداد OnCreate بهتر است یا تنظیم آن خاصیت در Pad Properties اون کامپوننت ؟ یا اینکه اصلا فرقی نداره؟
فرقی نمی کنه در OnCreat کدش را بنویسید، یا در Object Inspector مقدارش را تعریف کنید.


اگر در Uses توابع و فرم هایی باشد که در آن فرم استفاده نشود یعنی آن را فراخوانی نکرده باشیم و تنها Use شده باشند آیا در حجم برنامه تأثیر دارد؟
اگر یونیت مربوطه متغیر های Global ایی تعریف کرده باشه، یا در قسمت Initialization خودش کدی برای اجرا وجود داشته باش؛ می تونه روی کارایی برنامه، حجم فایل EXE و حجم حافظه مورد نیاز برنامه تاثیر بزاره.

MNosouhi
شنبه 14 مهر 1386, 10:47 صبح
ببخشید ، یه سوال هم من داشتم ، بالفرض من یونیت DateUtils رو توی دو فرم مختلف use کنم ، حالا دلفی چطور رفتار می کنه ، اون رو 2 بار load میکنه یا از اون برای همه فرم ها به صورت مشترک استفاده میکنه ؟ و آیا روی حجم هم تاثیری داره ؟

vcldeveloper
شنبه 14 مهر 1386, 16:03 عصر
بالفرض من یونیت DateUtils رو توی دو فرم مختلف use کنم ، حالا دلفی چطور رفتار می کنه ، اون رو 2 بار load میکنه یا از اون برای همه فرم ها به صورت مشترک استفاده میکنه ؟ و آیا روی حجم هم تاثیری داره ؟
یونیت لود نمیشه، گفته شد اگر در آن متغیرهای سراسری تعریف شوند، چون این متغیرها هر جا که یونیت use شده باشد، در دسترس هستند، پس مقداری حافظه برای آنها اختصاص داده میشه. اگر هم کدی در بخش Initialization داشته باشه، اون کد در زمان Initialize شدن برنامه اجرا میشه. کدهای یک یونیت بصورت عادی توسط کامپایلر دلفی با برنامه کامپایل نمیشند، مگر اینکه از کد مربوطه در برنامه استفاده کرده باشید، یعنی اگر شما هیچ تابعی را از DateUtils در برنامه فراخوانی نکنید و این یونیت متغیر سراسری خاصی تعریف نکرده باشه و در بخش Initialization آن هم کدی وجود نداشته باشه، بود یا نبود آن در برنامه شما تاثیری نخواهد داشت. اگر هم از تابعی در DateUtils استفاده کنید، فقط کد مربوط به آن تابع با برنامه شما کامپایل میشه، نه تمام توابع تعریف شده در آن.
در ضمن، وقتی یک یونیت در سایر یونیت های دیگر Use می شود، به ازاء هر بار Use شدن، سرباری به برنامه اضافه نمی کند.

sorrowdancer
پنج شنبه 19 مهر 1386, 22:19 عصر
در طراحی دیتابیس با اکسس اگر جدولمون فیلدهای زیادی داره بهتر اون رو چند تیبل کنیم یا در یک تیبل همه رو قرار بدیم

و سوال دیگه اینکه

اگر چند تیبل داریم آیا بهتر اینه که توی یک فایل پروژه اکسس ذخیره بشه یا جدا جدا ذخیره کنیم؟
(هر تیبل در یک فایل اکسس)

vcldeveloper
جمعه 20 مهر 1386, 02:14 صبح
در طراحی دیتابیس با اکسس اگر جدولمون فیلدهای زیادی داره بهتر اون رو چند تیبل کنیم یا در یک تیبل همه رو قرار بدیم

و سوال دیگه اینکه

اگر چند تیبل داریم آیا بهتر اینه که توی یک فایل پروژه اکسس ذخیره بشه یا جدا جدا ذخیره کنیم؟
(هر تیبل در یک فایل اکسس)
به نظر خودتون این سوال ربطی به دلفی داره؟!
اگر قرار باشه سوالات این تاپیک به این صورت پیش بره، باید بشه تمام سوالاتی که در بخش دلفی و بانک های اطلاعاتی مطرح میشند را در این تاپیک هم پرسید.

در این تاپیک سعی کنید نکات تکنیکی خاص مربوط به دلفی که ممکن است مفاهیم آنها خیلی خوب جا نیافتاده باشد را بررسی کنید.

در غیر اینصورت تاپیک قفل می شود.

shayan_delphi
شنبه 21 مهر 1386, 08:15 صبح
چرا بعضی وقتها فرم دوم که با دستور ShowModal باز می شه ،زیر پنجره فرم اول پنهان میشه؟

vcldeveloper
شنبه 21 مهر 1386, 23:26 عصر
چرا بعضی وقتها فرم دوم که با دستور ShowModal باز می شه ،زیر پنجره فرم اول پنهان میشه؟
برای جواب گرفتن از همچین سوالی، باید نمونه کدی که بتونه این مشکل را بازآفرینی کنه، قرار بدید تا با بررسی آن بشه متوجه شد چه عاملی این مشکل را برای شما بوجود میاره، چون در حالت عادی همچین مشکلی ایجاد نمیشه.

shayan_delphi
یک شنبه 22 مهر 1386, 08:39 صبح
اکثرا وقتی اتفاق می افته که بعد از باز شدن فرم سراغ برنامه دیگه بریم و بعد مجددا بخواهیم این فرم را مشاهده کنیم.