ما هي الطرق التي تجعل برنامجك سريع ؟
#1
السلام ورحمة الله وبركاتة ...

لدي سؤال ... عام نوعاً ما

ما هي الطرق التي يتخدذه المبرمجين عادتاً لجعل برامجه لا تتجمد او تكون ثقيلة او ....إلخ ؟

اعرف ان جواب هذا السؤال ... يعتمد على البرنامج الذي يتم برمجته ...

لكن قصدي مثلاً ... عندما اعمل برنامج كبير جداً .. كالفوتوشوب والـ 3D MAX و السكايب و الـ Word Microsodt وغيرها

فغالباً ... المبرمج المتوسط او المتبتدئ عندما يبرمج بعض برامجه يجدها ثقيلة واحياناً ... تحصل عملية تجمد ...
وما إلى ذلك ...

اعيد السؤال : ما هي الطرق التي يتخدذه المبرمجين عادتاً لجعل برامجه لا تتجمد او تكون ثقيلة او ....إلخ ؟

في أحد المرات رئيت احد المبرمجين يستعم هذا السطر في برنامجه :
PHP كود :
Application.ProcessMessages; 
بعد ان سئلته عن وضيفه الامر , اخبرني انه يمنع او يقلل من ثقل البرنامج ولا يتجمد ..!!
حيث اني بالحقيقة لم اكن اعلم بوجود مثل هذا النوع من الاوامر ... وفي نفس الوقت كنت في بعض الاحياان
اواجه مشكلة ثقل البرنامج ...إلخ

لذلك طرحت السؤال Smile

وشكراً لحسن القراءة
الرد
#2
وعليكم السلام Smile
إقتباس :ما هي الطرق التي يتخدذه المبرمجين عادتاً لجعل برامجه لا تتجمد او تكون ثقيلة او ....إلخ ؟

في الحقيقة الموضوع طويل جدا ... و هناك نوع (اختصاص ) من المبرمجون خاص به 'optimization engineer'
على كل حال :
-استخدم ال Thread للمهام التي تأخذ وقت معتبر
-قم بتحرير ال Objects التي تستخدمها عند انتهائك لاستخدامها
-قم بتحرير الذاكرة للمحجوزة للبوينتر
-تخلص من أي تعليمة اضافية غير مفيدة
-....

* أحد الشروط المهمة و التي تحدد نجاح البرنامج من فشله .. هي المراجعة الأخيرة للتطبيق , أغلب المبرمجين يتجاهلون هذه النقطة .. مما ينتج عنه تطبيق مليئ بال Bug !!


إقتباس :لكن قصدي مثلاً ... عندما اعمل برنامج كبير جداً .. كالفوتوشوب والـ 3D MAX و السكايب و الـ Word Microsodt وغيرها

لا بد من وجود Team منسق :
-مبرمجين
-مصممين
-Testers
-optimization engineer
-Installation Engineer
- .....


إقتباس :
كود :
Application.ProcessMessages;
ليست للتسريع .. مفهوم خاطئ تماما
الدالة تقوم ان صح التعبير بانهاء معالجة جميع رسائل الوينداوز التي يرسلها الوينداوز للتطبيق ..
تستخدم عادة مع تطبيقات الجرافيك controls Graphics
مثال : نأخذ على سبيل مثال أن لديك حلقة تكرار (100 تكرار) تستخدم تعليمة DrawX لكنترول محدد
في كل مرة (n) يتم فيها الرسم يتم ارسال رسالة WM_X الى الكونترول .. يقوم الكونترول بمعالجتها أولا ثم عند الانتهاء من المعالجة يتقدم الى الدورة الثانية (n+1) .. مما يسبب بطئ شديد في واجهة المستخدم UI
يقوم الكونترول بالتوقف عن الاستجابة الى حين وصول اشارة من الوينداوز (رسالة) => هذا سبب من أسباب تجمد البرنامج أو الكونترول .
عند استعمالك لل ProcessMessages فأنت تجبر الكونترول على التحول للقيادة اليدوية Smile .. (لن يتم انتظار وصول الرسائل الى الكونترول حتى يتم الانتقال الى الدورة n+1 )
الرد
#3
إقتباس :عند استعمالك لل processmessages فأنت تجبر الكونترول على التحول للقيادة اليدوية Smile .. (لن يتم انتظار وصول الرسائل الى الكونترول حتى يتم الانتقال الى الدورة n+1 )

لكن استاذنا الفاضل ، الدالة وان لم تكن دالة تسريع بحتة فهي في معني تنقيص الانتظار، وهذا نوع من التسريع الجزئي

أم تصوري لكلامكم خاطيء فالرجاء التصحيح؟
ولكن خالص الشكر
الرد
#4
السلام عليكم

ما شاء الله ... بجعبتك الكثير لنتعلمه منك P: اخي المبرمج SMP3

إقتباس : في الحقيقة الموضوع طويل جدا ... و هناك نوع (اختصاص ) من المبرمجون خاص به 'optimization engineer'
طيب لو اردت ان اتعلم اسااسيات هذا الاختصااص , بما اني مبرمج على الاقل ساكون على داريه باسباب بطئ برامجي ...
ماذا يجب ان اعرف ؟
وهل يوجد كتب او مقالات تتحدث بهذا الاختصااص ؟

إقتباس : * أحد الشروط المهمة و التي تحدد نجاح البرنامج من فشله .. هي المراجعة الأخيرة للتطبيق , أغلب المبرمجين يتجاهلون هذه النقطة .. مما ينتج عنه تطبيق مليئ بال Bug !!
صدقت @@" ... احياانا اتجاهل هذه النقطة

شكراً لك على توضيح وضيفه الدالة ProcessMessages ...
فعلاً ... كان المبرمج الذي سئلته يعمل على برنامج يوجد به جزء يستخدم الـ "Controls Graphics"

سؤال آخير هل يوجد اوامر تعمل بنفس عمل الـ ProcessMessages , اوش من هذا النوع من الاوامر ؟

وجزاك الله خير وكتبه ما تقدمه في موازين حسناتك , وزادك علماً فوق علمك اضعاف مضاعفه .

وعذراً على الإثقال , وشكراً لحسن القراءة
الرد
#5
عبد الهادي كتب :لكن استاذنا الفاضل ، الدالة وان لم تكن دالة تسريع بحتة فهي في معني تنقيص الانتظار، وهذا نوع من التسريع الجزئي

أم تصوري لكلامكم خاطيء فالرجاء التصحيح؟
ولكن خالص الشكر

إقتباس :عند استعمالك لل ProcessMessages فأنت تجبر الكونترول على التحول للقيادة اليدوية Smile .. (لن يتم انتظار وصول الرسائل الى الكونترول حتى يتم الانتقال الى الدورة n+1 )
[COLOR="Red"]ماذا يعني هذا ؟
يعني أن الزمن الفاصل بين كل MSG يرسله الوينداوز و ال MSG التالي يساوي بالتقريب صفر (على حسب Loop )
ألق نظرة على ProcessMessage من الوحدة Forms.pas [/COLOR]
PHP كود :
function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
var
  
Handled: Boolean;
begin
  Result 
:= False;
  if 
PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
  begin
    Result 
:= True;
    if 
Msg.Message <> WM_QUIT then
    begin
      Handled 
:= False;
      if 
Assigned(FOnMessage) then FOnMessage(Msg, Handled);
      if 
not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and
        
not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
      begin
        TranslateMessage
(Msg);
        
DispatchMessage(Msg);
      
end;
    
end
    
else
      
FTerminate := True;
  
end;
end; 
لاحظ أن كل التعامل مع الرسائل TMsg Smile
الرد
#6
إقتباس :ماذا يجب ان اعرف ؟
وهل يوجد كتب او مقالات تتحدث بهذا الاختصااص ؟

كما قلت لك سابقا الموضوع طويل جدا ...
لن تجد الكثير من المواضيع التي تتحدث عن optimization لأن عصر اليوم نتحدث عن رام بسعة 100 جيجا ومعالجات i5,i7 ,...
الطلب على مختصي optimization قليل بسبب توفر الشروط السابقة (معالجات حديثة)
يعني أن الكود مهما كان مليئ بالتعليمات البطيئة سيبدوا سريعا على المعالجات الحديثة !!
لا تهتم كثيرا بهذا المجال , و لكن حاول التركيز على :
-المؤشرات
-الأسمبلي
فكلتاهما تعدان ركيزة قوية حينما يتعلق الأمر بالسرعة
أما ان كنت تريد الخوض فعلا في هذا المجال فيتوجب عليك حتما أن تعرف طريقة التعامل مع CPU و تعليمات الأسمبلي & data alignment .
ألق نظرة على :
كود :
Intel® 64 and IA-32 Architectures Optimization Reference Manual http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
الكتاب بالفعل رائع جدا ... لقد اطلعت عليه لكني لم أنتهي منه بعد (طويل جداااا)


إقتباس :سؤال آخير هل يوجد اوامر تعمل بنفس عمل الـ ProcessMessages , اوش من هذا النوع من الاوامر ؟

ممكن .. دوال Api :
PHP كود :
TranslateMessage
DispatchMessage 
الرد
#7
السلام عليكم

تسريع البرنامج يبدأ من مرحلة التفكير/التصميم...اختيار الخواريزميات وما شابه
ثم عند تقدم البرمجة او اقتراب الانتهاء تاتي مرحلة الProfilling بتحليل البرنامج ومعرفة الاجزاء التي تاخذ وقت وتغييرها او تعديلها باخرى اسرع
الرد
#8
أنني فهمت الامر الان فجزاك الله خيرا استاذنا الكريم ، وانا ممتن لك كثيرا
الرد


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


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