الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال: افضل طريقة لتعريف النماذج؟

مغلق
بدأه Romantic_touch في 30 سبتمبر 2005 · 16 رد · 948 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم جميعا ورمضان مبارك قبل الزحمة :)

سؤالي هو ان لدي برنامج به مايقارب ال 20 نموذج او حوليها وقد يزيدا ويقل مستقبلا..

فهل اقوم بتعريفها كلها في ال module??

علما بأني قد احتاج بعضها لكي اقوم بتعبتة بعض الcontrols من نموذج اخر

اوضح هنا اني سمعت ان اي نموذج تفتحه سوف ياخذ مكان في الذاكرة وهذا سيسبب مشاكل عند المستخدم

مع العلم ايضا ان اذا عملت close لأحد النماذج فسوف احتاج الى تعريفه مرة اخرى واذا عرفته قبل ان اقفله سوف يصبح لدي نسختين من نفس النموذج لاني استخدم في البرنامج menu يعني قد افتح النموذج اكثر من مرة

ارجو من الاخوان الافادة رجاااااااااااااااء ولكم الشكر

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#2

شوف هذا الرابط

/index.php?showtopic=58694

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#3

اخري الكريم شكرا علىردك ولكن هذا الموضوع قد قراته وأعرفه ولكن ليس هنا سؤالي

سؤالي هوا اني عندما اقوم بتعريف النموذج في الmodule هل سيأخذ مساحة في الذاكرة

ام هل المساحة فقط في حالة show ؟؟

هذا جزء من السؤال وسوف اوضح الباقي فقط لكي لا يحدث لبس

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#4
Romantic_touch كتب:
اوضح هنا اني سمعت ان اي نموذج تفتحه سوف ياخذ مكان في الذاكرة وهذا سيسبب مشاكل عند المستخدم

لا توجد أي مشاكل متعلقة بالذاكرة عند استخدام العديد من الـ Forms في التطبيق الواحد.... جرب هذا الكود الذي يفتح 100 فورم و راقب حجم التطبيق في الذاكرة:

        Dim FormsCollection(99) As System.Windows.Forms.Form
        For Each frm As Form In FormsCollection
            frm = New Form
            frm.Show()
        Next

اقتباس
سؤالي هوا اني عندما اقوم بتعريف النموذج في الmodule هل سيأخذ مساحة في الذاكرة

أي Obiect معرف داخل الـ Module يتم حجز مكان له في الذاكرة سواء قمت بإستدعاء هذا الـ Object أم لا... لذا فهذا الأسلوب ليس جيداً ...

يمكنك الانتفاع بمدأ الوراثة للـ Forms التي سوف يتم تكرار الكود فيها... يعني من الممكن أن يعتمد تطبيقك على Form واحدة فقط تورث منها لباقي الـ Forms .

اقتباس
مع العلم ايضا ان اذا عملت close لأحد النماذج فسوف احتاج الى تعريفه مرة اخرى واذا عرفته قبل ان اقفله سوف يصبح لدي نسختين من نفس النموذج

عادةً يتم تعريف Instance جديد للفورم في نفس الـ Method التي تقوم بإستدعائها، مثال:

   Private Sub OpenNewInstance()
        Dim frm As New Form
        frm.Show()
    End Sub

تم تعديل هذه المشاركة بواسطة محمد عبد العليم في 1 أكتوبر 2005 في 00:18

رأس الحكمة الإيمان بالله

#5

اخي الكريم سؤالي هنا هو استفسار بناء على الموضوع اللذي طرحته على الرابط

/index.ph...79entry395079

إن شاء الله تقراه عشان تعرف موضوعي اللي بتكلم عنه :)

تم تعديل هذه المشاركة بواسطة Romantic_touch في 1 أكتوبر 2005 في 00:44

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#6

السلام عليكم

أستاذي الفاضل محمد عبد العليم ، كيف حالك ؟

فقط أريد أعرف معنى هذه الجملة "لا توجد أي مشاكل متعلقة بالذاكرة عند استخدام العديد من الـ Forms في التطبيق الواحد" ، هل تقصد استخدام بمعنى أن تكون موجودة داخل البرنامج لكنها غير معروضة أم تقصد استخدام بمعنى عرض ؟ ، وإن أمكن تفصيل بسيط حول هذه النقطة ، وجزاك الله خيراً

#7

توضيح إضافي

وهل يختلف أن آخذ 100 instance من فورم واحد عن ان أعمل 100 instance من 100 فورم مختلفة ؟

شكراً لك

#8

محمد النحراوي بنفسه !!! :) بخير حال و الحمد لله... كل عام و أنت بخير أخي العزيز و بعودة الأيام...

اقتباس
فقط أريد أعرف معنى هذه الجملة "لا توجد أي مشاكل متعلقة بالذاكرة عند استخدام العديد من الـ Forms في التطبيق الواحد" ، هل تقصد استخدام بمعنى أن تكون موجودة داخل البرنامج لكنها غير معروضة أم تقصد استخدام بمعنى عرض ؟ ، وإن أمكن تفصيل بسيط حول هذه النقطة

أقصد بهذه الجملة أنه لن يؤثر كثيراً فتح أكثر من فورم في الذاكرة، بمعنى لو لديك في التطبيق على سبيل المثال 10 Forms و قمت بفتح العشر Forms في وقت واحد فلن يكون هذا حمل على الذاكرة (الا اذا بالطبع كانت هذه الـ Forms لا تتصل بقاعدة بيانات عند فتحها :blink: أو شيئ من هذا القبيل) و هذا لأن الـ dot Net Framework قامت منذ بداية تشغيل التطبيق بتحميل الـ Assembly الخاص بالـ Form في الذاكرة، و عند استدعاء (أو عرض) أي Form أخرى لن يتم استدعاء الـ Assembly مرة أخرى لأنه موجود بالفعل في الذاكرة...

رأس الحكمة الإيمان بالله

#9

وأنت بالصحة والهناء والصلاح دوماً إن شاء الله :)

إذاً لا يفهم من كلامك أن كثرة النماذج داخل التطبيق الواحد لا تجهد الذاكرة ، لأن برنامج به 100 نموذج سيختلف عن برنامج به نموذج واحد فقط ، ولكن الذي يفهم منه أنه إذا تم فتح نموذج من المائة نموذج داخل التطبيق أو حتى فتحها كلها هو الذي لن يؤثر على الذاكرة . الخلاصة أن الحوار يدور في مرحلة ما بعد ترجمة التطبيق وليس في مرحلة التصميم . هل ما قلته أنا الآن صحيحاً ؟

تعديل

أشعر أن الكلام الذي قلته لا يوضح مقصدي ماذا أفعل :rolleyes: ؟

برنامج تنفيذي به 100 فورم ، آخر به فورم واحد ؟ (ملحوظة نماذج فارغة)

هل سيختلف الاثنان من ناحية استخدام الذاكرة ؟

أشعر أن هذا مرادي B)

تم تعديل هذه المشاركة بواسطة محمد النحراوي في 1 أكتوبر 2005 في 09:25

#10

تمام (بالرغم من انني لا أفهم ماذا تقصد بالضبط :D :unsure:) و حتى تتأكد من ذلك ضع هذا الكود في ضغطة زر:

 Dim FormsCollection(99) As System.Windows.Forms.Form
       For Each frm As Form In FormsCollection
           frm = New Form
           frm.Show()
       Next

رأس الحكمة الإيمان بالله

#11
اقتباس
برنامج تنفيذي به 100 فورم ، آخر به فورم واحد ؟ (ملحوظة نماذج فارغة)

هل سيختلف الاثنان من ناحية استخدام الذاكرة ؟

لا... لن يختلف هذا...

اقتباس
و هذا لأن الـ dot Net Framework قامت منذ بداية تشغيل التطبيق بتحميل الـ Assembly الخاص بالـ Form في الذاكرة، و عند استدعاء (أو عرض) أي Form أخرى لن يتم استدعاء الـ Assembly مرة أخرى لأنه موجود بالفعل في الذاكرة...

رأس الحكمة الإيمان بالله

#12

السلام عليكم ورحمة الله وبركاته

اخى محمد كل عام وانتم بخير وجميع الاخوة فى المنتدى بخير اسئل الله ان يبلغنا رمضان

اقتباس
لا توجد أي مشاكل متعلقة بالذاكرة عند استخدام العديد من الـ Forms في التطبيق الواحد.... جرب هذا الكود الذي يفتح 100 فورم و راقب حجم التطبيق في الذاكرة:  

   Dim FormsCollection(99) As System.Windows.Forms.Form
       For Each frm As Form In FormsCollection
           frm = New Form
           frm.Show()
       Next

مش غريب شوية الكلام دة يا اخى محمد ؟

طيب لية انا لما بعمل شاشة الشاشة دية تحتوى على تقرير اول مرة يتم تحميل الشاشة دية بتاخد وقت وفى اى مرة احب انى افتح الشاشة دية تتفتح معايا بسرعة جدا

انا عملت مثال بسيط جدا الان وفتحت 4 شاشات فقط

مرفق صور للبرنامج قبل فتح الشاشات وبعد الفتح ممكن تتفرج على حجم الذاكر

اقتباس
و هذا لأن الـ dot Net Framework قامت منذ بداية تشغيل التطبيق بتحميل الـ Assembly الخاص بالـ Form في الذاكرة، و عند استدعاء (أو عرض) أي Form أخرى لن يتم استدعاء الـ Assembly مرة أخرى لأنه موجود بالفعل في الذاكرة...

طيب انا لو عملت التالى

فى كل شاشة حوالى 20 متغير دة مثال يعنى وعندى برنامج فية حوالى 20 شاشة وكل شاشة فيها نفس العدد

هل يتم تحميل جميع المتغيرات فى الذاكرة مرة واحدة عند تحميل البرنامج ؟ ام عند استدعاء الشاشة والتعامل مع المتغيرات فقط ؟

جزاك الله خيرا يا اخى محمد

post-22366-1128123948_thumb.jpg

post-22366-1128123964_thumb.jpg

تم تعديل هذه المشاركة بواسطة waleedhm في 1 أكتوبر 2005 في 02:49

{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

br17.gif

برنامج الإتصلات الإدارية والارشيف الالكتروني

برنامج الخبير لنقاط البيع المباشرة

#13
اقتباس
طيب انا لو عملت التالى

فى كل شاشة حوالى 20 متغير دة مثال يعنى وعندى برنامج فية حوالى 20 شاشة وكل شاشة فيها نفس العدد

هل يتم تحميل جميع المتغيرات فى الذاكرة مرة واحدة عند تحميل البرنامج ؟ ام عند استدعاء الشاشة والتعامل مع المتغيرات فقط ؟

جزاك الله خيرا يا اخى محمد

المتغيرات تستعمل او تحمل في الذاكرة على حسب مكان اعلانها يعني لو كانت General فانها تحمل منذ بداية تشغيل البرنامج في الذاكرة و تبقى هناك الى أن ينتهي البرنامج اما لو اعلنت داخل function محددة فلن تحمل تلك المتغيرات الا عند استدعاء الفنكشن و يتم تدميرها عند الخروج من الفنكشن

بالنسبة لك اخي عبد العليم في مثالك يتم فقط انشاء Instances الشئ الذي كما قلت انت يتم استدعاء نفس ال Assembly او نفس النموذج الذي أصلا تم بناءه في بداية التشغيل ولكن ماذا لو كانت هنا 100 فورم كل واحدة مستقلة عن الاخرى أظن ان هذا سيشكل حملا زائدا في الذاكرة ...ام اني مخطئ ؟؟

تم تعديل هذه المشاركة بواسطة crazy-man في 1 أكتوبر 2005 في 03:52

#14

!!!!

مثالك يا عبدالعليم،، سينتج ذاكرة كبيرة،، حسب ظني،، وإن أردت جرب هذه الشفرة البسيطة! وأعطنا النتائج!!

for (int i=0i<100;i++){
Form f=new Form();
f.show();
Console.Write(System.ConsumedMemory());
}

طبعا أعتقد أنك تستطيع البحث عن الطريقة التي تعطيك حجم الذاكرة المستخدمة..

انظر إلى النتائج!! تراها في ازدياد... بالمناسبة بهذه الطريقة تستطيع معرفة كم تأخذ نافذتك من حجم من الذاكرة!! أو أي شيء تصنعه!!

#15
اقتباس
طيب لية انا لما بعمل شاشة الشاشة دية تحتوى على تقرير اول مرة يتم تحميل الشاشة دية بتاخد وقت وفى اى مرة احب انى افتح الشاشة دية تتفتح معايا بسرعة جدا

عندم تقوم بفتح تقرير لأول مرة فهذا لا يعتمد فقط على الـ Form التي تستضيف التقرير، فهذا التقرير من الطبيعي أن يقوم بالاتصال بقاعدة البيانات حتى يحضر البيانات المطلوبة، و فرضاً ان هذا التقرير Crystal Report ... تقوم الـ dot Net Framework بتحميل Assemblies معينة حتى تتم العملية بنجاح:

CrystalDecisions.CrystalReports.Engine

CrystalDecisions.ReportSource

CrystalDecisions.Shared

CrystalDecisions.Windows.Forms

هذا بالإضافة الى كلاسات الـ ADO.Net التي سوف تستخدم في التعامل مع قاعدة البيانات... فهذا يفسر الوقت المنقضى لأول مرة في عرض شاشة التقرير... أما عندما تغلق التقرير و تقوم بفتحه مرة أخرى و يفتح معك بسرعة فهذا بسب ان الـ GC لم يقم بإزالة الـ References لهذه الكلاسات بعد، و لا تزال موجودة بالذاكرة فلا تأخذ وقتاً كما أخذت من قبل..

اقتباس
هل يتم تحميل جميع المتغيرات فى الذاكرة مرة واحدة عند تحميل البرنامج ؟ ام عند استدعاء الشاشة والتعامل مع المتغيرات فقط ؟

كما أوضح crazy-man جزاه الله خيراً ان Global Variables فقط هي التي يتم تحميلها في الذاكرة مع بدأ تشعيل البرنامج (أو بالأصح عند تحميل الـ Class الذي يحوي هذه الـ Variables)..

و أيضاً أي Variable معرف داخل Module سيتم تحميله في الذاكرة من بدأ البرنامج حتى وقف تشغيله.. لأن الـ Module إفتراضياً static/shared ..

اقتباس
ولكن ماذا لو كانت هنا 100 فورم كل واحدة مستقلة عن الاخرى أظن ان هذا سيشكل حملا زائدا في الذاكرة

لن يشكل حملاً كبيراً، لأن الـ System.Widnows.Forms قد تم تحميله في الذاكرة في بداية تشغيل التطبيق.

اقتباس
وإن أردت جرب هذه الشفرة البسيطة! وأعطنا النتائج!!

14,312 KB قبل و 15,488 KB بعد يا أبو مازن...

رأس الحكمة الإيمان بالله

#16
اقتباس
  عندم تقوم بفتح تقرير لأول مرة فهذا لا يعتمد فقط على الـ Form التي تستضيف التقرير، فهذا التقرير من الطبيعي أن يقوم بالاتصال بقاعدة البيانات حتى يحضر البيانات المطلوبة، و فرضاً ان هذا التقرير Crystal Report ... تقوم الـ dot Net Framework بتحميل Assemblies معينة حتى تتم العملية بنجاح:

CrystalDecisions.CrystalReports.Engine

CrystalDecisions.ReportSource

CrystalDecisions.Shared

CrystalDecisions.Windows.Forms 

اعتقد دة افضل رد ان الدت نت لم يقم بتحمل Forms فى الذاكرة قبل تشتغل البرنامج علشان الـ dot Net Framework بتحميل Assemblies معينة حتى تتم العملية بنجاح

اقتباس
هل يتم تحميل جميع المتغيرات فى الذاكرة مرة واحدة عند تحميل البرنامج ؟ ام عند استدعاء الشاشة والتعامل مع المتغيرات فقط ؟   
اقتباس
كما أوضح crazy-man جزاه الله خيراً ان Global Variables فقط هي التي يتم تحميلها في الذاكرة مع بدأ تشعيل البرنامج (أو بالأصح عند تحميل الـ Class الذي يحوي هذه الـ Variables)..

 

اكيد انا عارف المعلومة دية

جزاكم الله خيرا وكل عام وانتم بخير

السلام عليكم

{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

br17.gif

برنامج الإتصلات الإدارية والارشيف الالكتروني

برنامج الخبير لنقاط البيع المباشرة

#17

هناك ما يسمى بـ Singleton Pattren القالب المفرد. نشاء لإنتاج مثيل واحد فقط من الفئة Class

وهو أحد أهم القوالب البرمجية المعروفة لدى جميع المبرمجين.

للإستزادة راجع http://www.dofactory.com/Patterns/PatternSingleton.aspx

أعتقد أنه سوف يفيدك كثيراً.

وشكراً

هذا الموضوع مغلق.

مواضيع مشابهة