نمایش نتایج 1 تا 15 از 15

نام تاپیک: نحوه استفاده صحیح از کامپوننت ها

  1. #1

    نحوه استفاده صحیح از کامپوننت ها

    سلام به همگی دوستان.
    فرض کنید من دارای 20 فرم جهت ثبت اطلاعات و یا ویرایش آنها هستم.
    سوال من اینه که به نظر شما فرضا استفاده از یک کامپوننت Adoqury در هر فرم بهتره ، یا استفاده از یک AdoQuery در یک فرم خاص یا در یک دیتا ماژول و فراخوانی آن از بقیه فرم ها؟

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

    همچنین آیا استفاده از کامپوننت ها به تعداد زیاد در هر فرم باعث بالا رفتن حجم فایل نمیشه ، یا اینکه تاثیری در سرعت اجرای برنامه داره یا نه؟

    در کل میخوام نظرات شما رو در مورد نحوه استفاده از کامپوننت های مختلف در فرم ها ، و مزایا و معایب هر کدام از اونها رو بدونم.

    با تشکر از همگی
    منتظر نظرات شما هستم
    یا علی

  2. #2

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    برای استفاده از بانک اطلاعاتی به نظر من بهترین روش استفاده از یک Data Module برای نگهداری بانک های اطلاعاتی هست ...
    این مورد چند تا مزیت داره که مهمترینشون اینه که اولا به منظم شدن کار کمک بزرگی می کنه ، و دوم اینکه شما در هر فرم برای دسترسی به بانکها فقط کافیه که یونیت مربوط به DM رو به قسمت Uses اضافه کنید ..
    اضافه کردن یونیتهای مختلف در یک Unit می تونه حجم و سرعت برنامه رو به ترتیب افزایش و کاهش بده !
    به نظر شما استفاده از یک کامپوننت در هر فرم سرعت اجرای اون رو بالا تر می بره یا استفاده از اون در یک فرم خاص و فراخوانی آن از یک فرم خاص؟
    شاید این تصور وجود داره که به عنوان مثال اگر یک کامپوننت در یک فرم خاص قرار بگیره دسترسی به اون در اون فرم سریعتر انجام میشه چون به سایر اشیای درون فرم نزدیک تر هست ، اما این تصور غلطیه و این موضوع تاثیر چندانی روی کارایی برنامه نداره ...
    همچنین آیا استفاده از کامپوننت ها به تعداد زیاد در هر فرم باعث بالا رفتن حجم فایل نمیشه ، یا اینکه تاثیری در سرعت اجرای برنامه داره یا نه؟
    مطمئنا استفاده از کامپوننتهای زیاد حجم برنامه رو افزایش میده و بالا رفتن حجم برنامه در بسیاری از موارد یعنی کاهش سرعت برنامه ...
    در کل میخوام نظرات شما رو در مورد نحوه استفاده از کامپوننت های مختلف در فرم ها ، و مزایا و معایب هر کدام از اونها رو بدونم.
    هرکامپوننتی با توجه به کارایی ای که داره می تونه با روشی خاص بهتر مورد استفاده قرار بگیره ، در این مورد خاص که در مورد بانکهای اطلاعاتی گفته شد ، به نظر من بهترین روش استفاده از یک Data Module هست ...

    بهتره منتظر نظر سایر دوستان هم باشیم ...

    موفق باشید ...

  3. #3

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    از نظرات ارزشمند دوست عزیزم Mahmood_N بسیار متشکرم.

    البته به نظر من استفاده از کامپوننتهای ویژوال ، تاثیر زیادی در حجم و سرعت اجرای اون داره .
    ولی آیا به نظر شما استفاده از کامپوننت های غیر ویژوال هم همینطوره؟

    مثلا استفاده از چند تا AdoTable یا Adoquery و یا امثال این نوع کامپوننت ها؟

    البته نظر شخصی من اینه که استفاده از اینها به تعداد زیاد نباید باعث کند شدن سرعت بشه، چون همه اینها در نهایت به یک فایل ارجاع داده میشوند و از یک Unit استفاده میکنند.

    نظر شما در مورد این نوع کامپوننت ها چیه ؟

  4. #4

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    کلا من فکر میکنم استفاده از چند تا شئ از یک نوع نباید حجم رو تغییر قابل توجهی بده ، چون همونطور که گفتید مثلا یک کلید از یک کتابخانه استفاده میکنه و استفاده از چند شئ کلید فقط باعث میشه که از کلاس TButton شئ های متعددی مشتق بشن و کتابخانه ای جدید به برنامه اضافه نمیشه ، در مورد سرعت هم فکر نمیکنم روی سرعت هم چندان تاثیر داشته باشه ، البته مطمئن نیستم .

  5. #5

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    نظر شما در مورد کامپوننت های ویژوال یا غیر ویژوال؟

    در مورد ویژوال اگه منظورتونه ، من فکر کنم در سرعت اجرای برنامه تاثیر بسیار زیادی داشته باشه

    هرچند که همه اونها از یک کلاس مشتق بشوند...

  6. #6

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    ولی آیا به نظر شما استفاده از کامپوننت های غیر ویژوال هم همینطوره؟
    وقتی یک کامپوننت Visual روی فرم قرار می گیره ، حجم فرم رو افزایش میده و چون فرمها به عنوان رسورس در فایل EXE ذخیره میشن ، حجم برنامه نهایی رو هم بالا خواهند برد ...
    برای یک کامپوننت در حالت معمول خود کامپوننت و Unit اون می تونه توی افزایش حجم برنامه تاثیر داشته باشه ...
    فایل DFM پروژه درواقع یک فایل متنی هست که مشخصات فرم و اجزای درون اون رو نگهداری میکنه ، مسلما یک کامپوننت غیر ویژوال هم به عنوان یک شیء در فرم داریا خواصی هست که باید ذخیره بشه ، پس اون هم می تونه حجم فایل رو افزایش بده اما این حجم فایل برای کامپوننتهای غیرویژوال که عموما خواص کمتری نسبت به کامپوننتهای ویژوال دارن شاید کمتر محسوس باشه ولی فرق چندانی بینشون نیست !
    یکی از راه های کاهش حجم برنامه حذف Unit های بی استفاده هست ، به عنوان مثال فرض کنید کامپوننتی روی فرم گذاشتید و به همین خاطر دلفی Unit مربوط به اون رو به بخش Uses اضافه کرد ، یونیت اضافه شده همراه سایر جزئیات برنامه کامپایل شده و حجم برنامه رو افزایش میده ، حالا اگر به هر دلیلی دیگه نخواستید از کامپوننت استفاده کنید ، وقتی اون رو حذف می کنید دلفی Unit اون رو از بخش Uses حذف نمی کنه ، و خودتون باید اون رو حذف کنید ...
    مورد دیگه که خیلی کم بهش اهمیت داده میشه ، نحوه ی کدنویسی هست ، به عنوان مثال فرض کنید می خواید مسیر فایل اجرایی برنامه رو بدست بیارید ، برای این کار چند راه دارید که دو تاش رو مثال می زنیم :

    1. استفاده از Application.ExeName :
    ExtractFilePath(Application.ExeName);

    2. استفاده از (ParamStr(0 :
    ExtractFilePath(ParamStr(0));


    در مورد اول برای استفاده از Application به یونیت Forms نیاز داریم اما برای دومی به یونیت جدایی نیاز نیست ( ParamStr در یونیت System هست که جزء یونیتهای اصلی برنامه هست و نیاز به Use کردن نداره ) ، با این کار می تونیم مثلا یونیت Forms رو از برنامه حذف کنیم که این کار باعث حدود 200 کیلوبایت صرفه جویی در حجم برنامه میشه ...
    البته این فقط یک مثال بود و برای کار با برنامه در اکثر جاها نیاز به یونیت Forms داریم ! ولی برای برنامه های کوچک و خاصی میشه اون رو نادیده گرفت ، مثلا یک ویروس ! شاید نیاز به این یونیت نداشته باشه و البته ویروس به حجم کم هم نیاز داره ...

    به هر حال برای کارایی بهتر و حجم کمتر باید اولا کامپوننتها و یونیتهای اونها رو بشناسیم و دوما کمی در کدنویسی بهینه تر عمل کنیم ... ، موردی اولی که اشاره کردم در مورد حذف کامپوننت و حذف یونیت مربوط به اون میتونه خیلی در کاهش حجم برنامه موثر باشه ...

    موفق باشید ...

  7. #7

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    فایل DFM پروژه درواقع یک فایل متنی هست که مشخصات فرم و اجزای درون اون رو نگهداری میکنه ، مسلما یک کامپوننت غیر ویژوال هم به عنوان یک شیء در فرم داریا خواصی هست که باید ذخیره بشه ، پس اون هم می تونه حجم فایل رو افزایش بده اما این حجم فایل برای کامپوننتهای غیرویژوال که عموما خواص کمتری نسبت به کامپوننتهای ویژوال دارن شاید کمتر محسوس باشه ولی فرق چندانی بینشون نیست !
    ولی من اینجا کمی نظرم با شما متفاوته...
    چون اولا ما کامپوننتهای غیر ویژوالی داریم که خواصشون از کامپوننتهای ویژوال بیشتره.
    دوما اینکه ، کامپوننتهای ویژوال از اونجا که دارای گرافیک و شکل دیداری هستند پس قاعدتا باید با کامپوننت های غیر ویژوال خیلی فرق کنند و در نتیجه افزایش حجم و کاهش سرعت رو هم در پی دارند.

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

    چهارم هم اینکه منتظر نظرات سایر اساتید هستیم

  8. #8

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

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

  9. #9
    کاربر دائمی آواتار AmirSky
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    تهران
    پست
    216

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    کامپوننت ویژوال با غیر ویژوال فرقی نمی کنه و هرکدوم ممکنه باعث کندی برنامه بشه و خیلی از کامپوننت های غیر ویژوال هستند که تاثیر بیشتری رو برنامه دارند. استفاده از کامپوننت در یک فرم یا در جای دیگر برنامه هم زیاد فرقی نداره و اگر شما یک بار در برنامه از یک کامپوننت استفاده کنید حجم برنامه زیاد فرقی با اینکه چند بار استفاده کنید نداره. و اینکه شما کامپوننتها رو در کجا قرار می دهید بستگی به خودتان داره . استفاده از Data Module در یک برنامه بزرگ با Table ها و Query های خیلی زیاد ممکنه خیلی سخت باشه من خودم از Data Module استفاده نمی کنم چون در یک برنامه با بیش از 500 query نمی دونم چه جوری می شه مدیریتشون کرد. میشه داخل چند تا فرم پایه تعدادی Query یا StoredProc قرار داد و فرم های دیگر برنامه رو از روی اون inherit نمود .
    استفاده از کامپوننت چک نمودن قفل سخت افزاری به شدت در سرعت برنامه تاثیر میگذاره و استفاده در هر فرم باعث کندی بیش از حد برنامه می شه و بهتره فقط یک بار چک بشه و در فرمهای بعدی با خوندن اطلاعات قفل که در قبلا لود شده کار کنه.
    برای نمونه وقتی من کامپوننت فست ریپورت رو در برنامه قرار دادم حدود 1.5 مگابایت به حجم برنامه اضافه شد و وقتی در فرم های دیگه قرار دادم تاثیر چندانی نداشت ولی با این حال این کامپوننت رو روی فرم های پایه قرار دادم تا در فرم های دیگر در موقع inherit شدن باز هم تا جایی که ممکن است از حجم برنامه کم کنم.

  10. #10

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    استفاده از Data Module در یک برنامه بزرگ با Table ها و Query های خیلی زیاد ممکنه خیلی سخت باشه من خودم از Data Module استفاده نمی کنم چون در یک برنامه با بیش از 500 query نمی دونم چه جوری می شه مدیریتشون کرد.
    لزومی نداره یک Data Module داشته باشید، می تونید دیتاست های مرتبط با هم را در Data Module های مختلف قرار بدید. دیتا ست های عمومی، و اشیاء Connection را هم می تونید در یک Data Module قرار بدید که توسط سایر Data Module ها use شده، تا همه Data Moduleها به Connection و دیتاست های عمومی دسترسی داشته باشند.

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

    همچنین آیا استفاده از کامپوننت ها به تعداد زیاد در هر فرم باعث بالا رفتن حجم فایل نمیشه ، یا اینکه تاثیری در سرعت اجرای برنامه داره یا نه؟
    هر کدی به خودی خود موجب افزایش حجم فایل باینری خروجی میشه. افزایش حجم فایل باینری موجب کاهش سرعت لود شدن فایل EXE در حافظه میشه.

    استفاده از کامپوننت های Visual یا غیر Visual در داخل فرم (اضافه کردن از طریق Form Designer)، باعث افزایش حجم DFM فرم میشه، و این باعث کاهش لود سرعت باز شدن فرم میشه، چون برای هر بار Create این فرم، باید داده های DFM از Resource خوانده بشند، و اشیاء تعریف شده در آن ساخته بشند.

    Visual یا non-visual بودن یک کامپوننت به خودی خود تاثیری در حجم و سرعت برنامه نداره، بلکه کاری که اون کامپوننت انجام میده مشخص میکنه که این کامپوننت چقدر در سرعت برنامه و حافظه مورد استفاده آن تاثیر میزاره. پس یک کامپوننت non-visual میتونه از یک کامپوننت visual فشار بیشتری بر سیستم اعمال کنه.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  11. #11

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    سوال دیگه ای که که خیلی هم ذهن من رو مشغول کرده ، البته شاید زیاد به این تاپیک مربوط نشه و بیشتر در مورد بحث امنیتی باشه، در موردنحوه فراخوانی توابع در دیباگر ها است؟

    مثلا هنگامی که شما از یک کامپوننت در هر فرمی استفاده میکنید ،و از متدهای کامپوننت در اون فرم فراخوانی میکنی ، آیا آدرس همه این توابع و متدها به یک آدرس ختم میشه یا هرکدوم آدرس جداگانه ای در حافظه پیدا میکنند و برای شناسایی اونها لازمه تا هر کدام رو تک تک چک کرد؟

    البته شاید به نظر این سوال رو باید در قسمت امنیت میپرسیدم ولی خوب هدف من اینه که آیا فرضا با استفاده از کامپوننت یک قفل و استفاده اون در هر فرم بصورت جداگانه آدرس توابع اون هم فرق میکنه یا همه به یک آدرس ختم میشه؟

    چون بعضی وقتها با اینکه حجم برنامه بالا میره ولی میشه برای امنیت بیشتر ، سرعت و حجم رو قربانی امنیت کرد.

  12. #12

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    استفاده از کامپوننت های Visual یا غیر Visual در داخل فرم (اضافه کردن از طریق Form Designer)، باعث افزایش حجم DFM فرم میشه، و این باعث کاهش لود سرعت باز شدن فرم میشه، چون برای هر بار Create این فرم، باید داده های DFM از Resource خوانده بشند، و اشیاء تعریف شده در آن ساخته بشند.
    در مورد این جمله ای که نوشتید ، در صورتی که ما از Form Designer این کار رو انجام بدیم ، حجم DFM افزایش پیدا میکنه ؟
    فرضا اگه خودمون کامپوننت رو به صورت RunTime ایجاد کنیم ، باعث بالا رفتن حجم DFM نمیشه؟

  13. #13

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    فرضا اگه خودمون کامپوننت رو به صورت RunTime ایجاد کنیم ، باعث بالا رفتن حجم DFM نمیشه؟
    موجب افزایش حجم DFM نمیشه، ولی در هر حال روی حجم فایل باینری تولید شده و کارایی برنامه تاثیر داره. مدت زمانی که برای لود یک فرم صرف میشه مساوی است با زمان مورد نیاز برای خواندن داده های DFM، و زمان مورد نیاز برای ساخت اشیاء مورد نظر بر اساس داده های خوانده شده از DFM. شما اگر کامپوننتی را بصورت Runtime بسازید، مورد اول درباره آن رخ نمیده، ولی مورد دوم همچنان در زمان لود شدن فرم موثر هست.

    مثلا هنگامی که شما از یک کامپوننت در هر فرمی استفاده میکنید ،و از متدهای کامپوننت در اون فرم فراخوانی میکنی ، آیا آدرس همه این توابع و متدها به یک آدرس ختم میشه یا هرکدوم آدرس جداگانه ای در حافظه پیدا میکنند و برای شناسایی اونها لازمه تا هر کدام رو تک تک چک کرد؟
    این رو باید در تاپیک جداگانه ایی بپرسید.

    آدرس متدهای استاتیک یا class functionها در بخشی از حافظه که داده های کلاس مربوطه را نگهداری میکنه، ذخیره میشه. آدرس متدهای مربوط به یک instance از یک کلاس، در بخشی از حافظه Heap که به آن شی اختصاص داده شده، نگهداری میشه.

    پس اگر شما یک متد استاتیک از یک کلاس را فراخوانی کنید، حتی اگر از طریق شی های مختلفی از اون کلاس این فراخوانی انجام شده باشه، آدرس متد ثابت خواهد بود. اگر یک متد معمولی را از طریق چند شی از یک کلاس فراخوانی کنید، آدرس این متد برای هر شی متفاوت خواهد بود.

    اگر کامپوننت شما از Event-handler استفاده کرده باشه، و این Event-handler در زمان طراحی به کامپوننت نسبت داده شده باشه (مثلا با دابل کلیک کردن بر روی کامپوننت دکمه، یک Event-handler توسط IDE برای رویداد OnClick ساخته میشه) آدرس این Event-handler به راحتی از طریق ابزارهای کرک فابل شناسایی هست، فقط کافی هست که فرد نام Event مورد نظر را در کد جستجو کند. اما اگر Event-handler در runtime اختصاص داده شده باشه (مثلا Button1.OnButton := Button1Click) پیدا کردن متدی که با رخ دادن آن رویداد اجرا خواهد شد، سخت تر میشه.

    در هر حال، این بحث را در تالار امنیت نرم افزار دنبال کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  14. #14

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    اگر کامپوننت شما از Event-handler استفاده کرده باشه، و این Event-handler در زمان طراحی به کامپوننت نسبت داده شده باشه (مثلا با دابل کلیک کردن بر روی کامپوننت دکمه، یک Event-handler توسط IDE برای رویداد OnClick ساخته میشه) آدرس این Event-handler به راحتی از طریق ابزارهای کرک فابل شناسایی هست، فقط کافی هست که فرد نام Event مورد نظر را در کد جستجو کند. اما اگر Event-handler در runtime اختصاص داده شده باشه (مثلا Button1.OnButton := Button1Click) پیدا کردن متدی که با رخ دادن آن رویداد اجرا خواهد شد، سخت تر میشه.
    ممنون از توضیحاتتون
    میتونید در این مورد کمی بیشتر توضیح بدید؟

  15. #15

    نقل قول: نحوه استفاده صحیح از کامپوننت ها

    میتونید در این مورد کمی بیشتر توضیح بدید؟
    اون مطلب به این تاپیک مربوط نمیشه، و همانطور که گفتم، باید در تاپیک جداگانه ایی در تالار امنیت نرم افزار پیگیر آن باشید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •