تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
قضية كبيرة جدًا للمناقشة ... وكل المبرمجين المحترفين مدعوِّين لمناقشتها
#11
لا يفتى ومالك في المدينه .
وكيف يفتى والاستاذ ابراهيم ايبو موجود خالص احترامي كفيت ووفيت.

اللهم اني قد نذرت نفسي لمساعدت الاخرين فوفقني وكن لي معين
جاهز لمساعدة اي حد يحتاج لمساعدتي
طبيب اعشق البرمجة . 
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#12
السلام عليكم ورحمة الله وبركاته
اخوتي الكرام لا يشغل بالكم الموضوع كثيرا
زبدة الموضوع هو : إن المتغيرات العامة التي تكون على مستوى  الكلاس او المشروع انتقها بعناية وبخاصة الرقمية  منها لأنها ستبقى في الذاكرة حتى اغلاق البرنامج
اما المتغيرات التي تكون معرفة في دالة فإنها ستنتهي بنهاية الدالة وستدمر تلقائيا وان انتقيتها Byte او Integer فلا بأس والامر يعود لكل مبرمج 
سأورد لكم معلومة عرفتها يوما وقتها كنت لا اعرف بالكومبيوتر سوى المشاهدة
في احد الأيام كنت اعمل رساما في معمل للتطريز وفي المرسم لدينا كومبيوتر وكان أحد الأشخاص يعمل عليه وبعد الانتهاء أراد إطفاء الكومبيوتر 
فكتب تعليمة Park وهي من مختصر من كلمة Parking ومعناها ركن الشيء في في مكان الوقوف (تكريج أي وضع السيارة في الكراج) وسألته لماذا هذه التعليمة ؟
فقال لي وقتها حتى يتم إعادة رؤوس القراءة الخاصة بالهارد الى المكان الذي تكون فيه في حالة عدم العمل (حسب ما قال لي) 
اما الان فلسنا بحاجة الى هكذا امر لأن رأس القراءة للهارد أتوماتيكيا يعود الى مكان الكراج
وعلى هذا نقيس الكثير من الأمور التي كانت شائعة وقتها
فمسألة الذكرة (640) كيلوبايت كنا نحاول ان لا تنخفض عن 600 كيلوبايت ونعمد الى برمجة ملف الـ Confjg.Sys حتى تعمل البرامج وكنا نعمد الى الذاكرة الممتدة لدعم الرام وأتذكر اني مرة  اضفت فلاش ميموري وجعلتها رام داعم 
كل ذلك بسبب ان الذواكر كانت غالية الثمن وأحجامها صغيرة والبرامج كانت تبرمج وتحسب بالبايت وقتها
واعتقد  ان أنواع البيانات الصغيرة مثل Byte و Short تم انشاؤها حتى لا تستهلك الذاكرة (مجرد رأي شخصي قد أكون مخطئا)
وكما قلت أصبحت الرامات كبيرة للغاية بحيث لم يعد الاهتمام بنوع المتغيرات 
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
#13
السلام عليكم ورحمة الله وبركاته



لو عرفنا ماذا يحدث داخل وحدة المعالجة المركزية ( CPU )
   


يوجد شيء اسمه :
سجل وحدة المعالجة المركزية الأصلي
لتقريب الفكرة ( يشبة حاوية بيانات )
لتقريب الفكرة أكثر : اذا اردت أن تقوم بشحن بضاعة من الصين على متن باخرة في البحر , فأن عملية الشحن تكون داخل حاويات ( containers ) حتى لو شحنت بضاعة صغيرة جداً مثل شاشة كمبيوتر فقط , فإنك يجب أن تقوم بوضعها داخل حاوية, مع العلم أن الحاوية كبيرة وفارغة ويوجد متسع كبير لوضع أشياء كثيرة, ولكنك فقط تريد أن تقوم بشحن شاشة كمبيوتر فقط , هنا أنت مضطر إلى تأجير حاوية كاملة لعملية الشحن, حتى وأن كان معظم الحاوية سيصبح فارغ.


تخيل أن الحاوية هي ( سجل وحدة المعالجة المركزية الأصلي )
   

وأن المتغير من نوع ( byte ) هو البضاعة المراد شحنها ( الصندوق )
   



تعمل وحدة المعالجة المركزية ( CPU ) بشكل أكثر كفاءة عندما تكون البيانات التي تتم معالجتها تساوي حجم سجل وحدة المعالجة المركزية الأصلي. وينطبق هذا بشكل غير مباشر على الأكواد التي نكتبها بلغة .NET أيضًا.

في معظم الحالات ، عند إستخدام (int ) في حلقة ( Loop ) يكون أكثر كفاءة من استخدام ( byte ). 
متغير من نوع ( Int ) يظهر زيادة في الأداء بنسبة 10٪ تقريبًا.

إذا كنت مهتم بالسرعة , استخدم النوع Integer بدون تفكير.
إذا كنت مهتم بحفظ المساحة في الذاكرة (فقط في حال المصفوفات الكبيرة جداً) إستخدام متغير من نوع ( byte ) إن أمكن.



وحدة المعالجة المركزية ( CPU ) :
إذا كان الكمبيوتر يعمل بنظام 32bit
فإن وحدة المعالجة المركزية ( CPU ) هي أصلاً مصممة لتعالج بيانات بحجم 32bit , كما ذكرت في الأعلى عن ( سجل وحدة المعالجة المركزية الأصلي ) وعن مثال الحاويات في البحر

( سجل وحدة المعالجة المركزية الأصلي ) طول البيانات في هذا السجل هو 32bit ( الحاوية )

أي بما معناه : لو اردت من وحدة المعالجة المركزية أن تعالج متغير من نوع ( byte ) والذي يساوي 8bit فهي أصلاً تقوم بتحويلة إلى سجل بيانات بطول ( 32bit ) 
سجل بطول 32bit ( يحتوي على بيانات بطول 8bit المطلوبة والباقي 24bit فارغة )
وهذا يزيد من العمل على وحدة المعالجة المركزية.
النوع Int32 هو نفسة النوع Integer الاسم يختلف لكن حجم المتغير واحد وهو 32bit والذي يساوي نفس طول بيانات ( سجل وحدة المعالجة المركزية الأصلي ) هنا لن يتم أي يعمل إضافي وسيكون أسرع , ولكن السرعة هنا تكاد تكون غير محسوسة أبداً , لأن اغلب العمليات التي نقوم بها عادية وحجمها قليل.
ولكن سيظهر الفرق عندما تقوم بعمليات تتكون من ملايين الإجراءات. عندها ستلاحظ الفرق و النوع Integer هو الأسرع بفرق تقريباً 10%.


تم تصميم وحدة المعالجة المركزية للعمل بكفاءة بقيم 32 بت
القيم الأصغر يكون التعامل معها معقد.

لفهم الموضوع :
تقوم (وحدة المعالجة المركزية) عند قراءة بايت واحد ، على سبيل المثال : مثل نوع المتغير (Byte) = حجم 8bit ، يجب على وحدة المعالجة المركزية قراءة كتلة بطول 32 بت التي تحتوي عليها,
ثم إخفاء الـ 24 بت الفارغة.
24bit + 8bit = 32bit
تريد أن تعالج 8bit
ستخفي 24bit
ولكتابة بايت واحد ، يجب عليها قراءة كتلة بطول 32 بت الوجهة ، والكتابة فوق 8bit بقيمة البايتات المطلوبة ، وإعادة كتابة كتلة بطول 32bit بأكملها مرة أخرى.
من ناحية المساحة ، بالطبع ، يمكنك حفظ عدد قليل من البايتات باستخدام أنواع بيانات أصغر.
لاحظ هنا اتكلم عن سرعة معالجة البيانات وليس عن حفظ المساحة

لذلك إذا كنت تقوم ببناء جدول في قاعدة البيانات ويحتوي على ملايين من الصفوف ، سيكون من المفيد التفكير في أنواع البيانات الأقصر صبعاً.
(وقد يكون هذا سببًا جيدًا لاستخدام أنواع بيانات أصغر في قاعدة البيانات الخاصة بك)

ولكن عندما يتعلق الأمر بـ (وحدة المعالجة المركزية) أي المقصود سرعة البرنامج أو التطبيق , فأن نوع البيانات Integer هو الأسرع.



في الأجهزة التي تعمل بنظام 64bit ( الأحدث )
فإن ( سجل وحدة المعالجة المركزية الأصلي ) يكون بحجم 64bit 
وذلك لمعالجة بيانات أكبر ككتلة واحدة
في هذة الحالة تتم المعالجة بشكل مضاعف
أي بما معناه تتم معالجة بيانات أكبر في وقت اقصر.



للمعلومية : أغلب مطورين الـ Net. ( من شركة مايكروسوفت ) اصحاب الـ Net. ( مطورين الـ Net. نفسهم ) لا يستخدمون نوع البيانات ( Byte = بحجم 8bit ) أو ( Short = بحجم 16bit) وذلك من خلال رؤية البرمجيات التي يكتبونها.
من النوادر, وسأندهش إذا وجدت أحد منهم قد استخدم هذة الأنواع من المتغيرات Byte أو Short 


في النهاية , نحن نعيش في سنة 2022 , والمقارنات هذة والتحسين الجزيئي للمتغيرات كان في عصر السبعينات والثمانينات.
أما الآن المقارنة في الأداء بين أنواع وأحجام المتغيرات تكاد تكون منعدمة وغير قابلة للتطبيق في معظم التطبيقات, إلا إذا كنت تتعامل مع قاعدة بيانات كبيرة جداً جداً جداً جداً. (وهذا فيما يخص الحجم فقط وليس سرعة الأداء)




الخلاصة : ( أكتب ما يحلو لك في البرنامج - ولا تهتم أبداً بأن هذا النوع أو ذلك النوع سيؤثر على آداء وسرعة البرنامج )
لأنه في نهاية المطاف - وحدة المعالجة المركزية ( CPU ) - ستحول البيانات 
إلى كتل بحجم 32bit لأنظمة الكمبيوتر التي تعمل بنظام 32bit 
وإلى كتل بحجم 64bit لأنظمة الكمبيوتر التي تعمل بنظام 64bit 

أرجوا أن لا تسيء الفهم بين سرعة الأداء وبين حجم البيانات


يقاس الأداء بالسرعة التي يمكن لوحدة المعالجة المركزية تنفيذ التعليمات بها
ويتم التحكم في هذا السرعة بواسطة ساعة. مع كل ( نقرة أو نبضة أو دورة ) على مدار الساعة ، مع كل دورة تقوم وحدة المعالجة المركزية بإحضار تعليمة أو (عملية) واحدة وتنفيذها.
تقاس سرعة الساعة بالدورات في الثانية ، وتعرف الدورة الواحدة بـ 1 هرتز. ( cpu clock cycle )
هذا يعني أن وحدة المعالجة المركزية التي تبلغ سرعتها 3.6 جيجا هرتز ( 3.6 GHz  ) يمكنها تنفيذ ( ثلاثة مليارات وستمائة مليون - 3,600,000,000) دورة في الثانية الواحدة.
   

كلما زادت سرعة الساعة في وحدة المعالجة المركزية ، زادت سرعة معالجتها للتعليمات.



متى أستخدم النوع ( byte ) أو ( short )؟ 
عند إنشاء مصفوفات كبيرة جداً . 
على سبيل المثال حفظ ألوان صورة كبير جداً ( الـ pixel ) كل نقطة في الصورة يعبر عن pixel والبكسل الواحد يحتوي على 3 متغيرات ( احمر - اخضر - أزرق ) ( 255 ,255 ,255 )
تخيل الصورة بجودة عالية وحجمها كبير (4000x4000) بكسل يعني = 16,000,000 بكسل , وكل بكسل يحتوي على 3 متغيرات لتحديد لون البكسل , يعني 16,000,000x3 (الناتج) = 48,000,000 ثمانية وأربعون مليون رقم لتشكيل الصورة , كل هذة الأرقام محفوظة في مصفوفة ثلاثية الأبعاد.
هنا وفي هذة الحالة من الأفضل أكيد إستخدام النوع (Byte) لحفظ الذاكرة العشوائية الـ ( Memory ) , هذا ليس له علاقة بسرعة الأداء , ولكن بحفظ المساحة
ولماذا ؟
لعدم إستخدام مساحة أكبر من الذاكرة العشوائية الـ ( Memory ) حيث يكون توفير الذاكرة مهمًا بالفعل.

 

عن نفسي لم استخدم أبداً أنواع بيانات أصغر من Integer
استخدمت هذة الأنواع
Integer = 4 Byte
Single = 4 Byte
Double = 8 Byte
Long = 8 Byte
ULong = 8 Byte
Decimal = 16 Byte


من خبرتي الشخصية (عند كتابة كود لبرنامج معين لا تزعج نفسة كثيراً بتحديد انواع البيانات بهدف سرعة الأداء ) اكتب ما يحلو لك , ( لأن الفرق الذي ستحدثة هو أجزاء من المليار لا يذكر أبداً أبداً أبداً ) فهل ستتعب نفسة لإحداث فرق يعبر عن جزء من المليار ( طبعاً لا )
لكن عند تصميم قواعد البيانات , نعم اختر انواع البيانات بعناية, وذلك لحفظ المساحة.


أرجوا أن اكون قد وفقت في طرح معلومة مفيدة.


تحياتي للجميع
الرد }}}


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الى الاخوة المبرمجين بالسعودية مساعدة بخصوص الفاتورة الإلكترونية mohamedgadain61 7 2,779 23-12-21, 06:07 AM
آخر رد: DR.YASER
  مشكلة كبيرة ارجو المساعدة خالد20 3 1,305 22-06-21, 04:54 PM
آخر رد: خالد20
  [كود] احتج كود بعد ازن اخونا المبرمجين (تم الحل) محمد ايمن 6 1,993 24-05-20, 03:15 AM
آخر رد: محمد ايمن
  مطلوب مثال لعرض بيانات كبيرة الحجم مع بروجرس بار new_programer 2 1,510 05-03-19, 06:28 AM
آخر رد: new_programer
  مساعده شباب اريد تعديل الكود يشتغل عليDataGridView بدل ListView -اين المحترفين Fransesco 5 2,214 25-02-19, 10:49 AM
آخر رد: elgokr
  ممكن احد يعمل المشروع اخواني المبرمجين نور الهدى الهدى 14 4,797 21-06-18, 04:51 PM
آخر رد: نور الهدى الهدى
  [VB.NET] رجاء دخول المحترفين فى برمجة الشبكات network 0 2,374 13-09-17, 05:45 AM
آخر رد: network
  مشكلة كبيرة فى طريح تاريخين من بعض عشان يجيبلى عدد الدقايق مابين التاريخين دول araxis 8 2,822 27-10-16, 08:23 PM
آخر رد: ممدوح
  الخبراء المبرمجين والمختصيين محمد بوقزاحة 4 2,312 27-10-16, 07:03 PM
آخر رد: محمد بوقزاحة
  مساعده من الخبراء المبرمجين والمختصيين محمد بوقزاحة 0 1,454 21-10-16, 12:19 PM
آخر رد: محمد بوقزاحة

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم