المشاركات : 306
المواضيع 45
:
: 0
الإنتساب : Jul 2012
السلام ورحمة الله وبركاتة ...
لدي سؤال ... عام نوعاً ما
ما هي الطرق التي يتخدذه المبرمجين عادتاً لجعل برامجه لا تتجمد او تكون ثقيلة او ....إلخ ؟
اعرف ان جواب هذا السؤال ... يعتمد على البرنامج الذي يتم برمجته ...
لكن قصدي مثلاً ... عندما اعمل برنامج كبير جداً .. كالفوتوشوب والـ 3D MAX و السكايب و الـ Word Microsodt وغيرها
فغالباً ... المبرمج المتوسط او المتبتدئ عندما يبرمج بعض برامجه يجدها ثقيلة واحياناً ... تحصل عملية تجمد ...
وما إلى ذلك ...
اعيد السؤال :
ما هي الطرق التي يتخدذه المبرمجين عادتاً لجعل برامجه لا تتجمد او تكون ثقيلة او ....إلخ ؟
في أحد المرات رئيت احد المبرمجين يستعم هذا السطر في برنامجه :
PHP كود :
Application.ProcessMessages;
بعد ان سئلته عن وضيفه الامر , اخبرني انه يمنع او يقلل من ثقل البرنامج ولا يتجمد ..!!
حيث اني بالحقيقة لم اكن اعلم بوجود مثل هذا النوع من الاوامر ... وفي نفس الوقت كنت في بعض الاحياان
اواجه مشكلة ثقل البرنامج ...إلخ
لذلك طرحت السؤال
وشكراً لحسن القراءة
المشاركات : 632
المواضيع 66
:
: 6
الإنتساب : Jul 2010
وعليكم السلام
إقتباس :ما هي الطرق التي يتخدذه المبرمجين عادتاً لجعل برامجه لا تتجمد او تكون ثقيلة او ....إلخ ؟
في الحقيقة الموضوع طويل جدا ... و هناك نوع (اختصاص ) من المبرمجون خاص به '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 فأنت تجبر الكونترول على التحول للقيادة اليدوية
.. (لن يتم انتظار وصول الرسائل الى الكونترول حتى يتم الانتقال الى الدورة n+1 )
المشاركات : 77
المواضيع 7
:
: 0
الإنتساب : Mar 2013
إقتباس :عند استعمالك لل processmessages فأنت تجبر الكونترول على التحول للقيادة اليدوية
.. (لن يتم انتظار وصول الرسائل الى الكونترول حتى يتم الانتقال الى الدورة n+1 )
لكن استاذنا الفاضل ، الدالة وان لم تكن دالة تسريع بحتة فهي في معني تنقيص الانتظار، وهذا نوع من التسريع الجزئي
أم تصوري لكلامكم خاطيء فالرجاء التصحيح؟
ولكن خالص الشكر
المشاركات : 306
المواضيع 45
:
: 0
الإنتساب : Jul 2012
السلام عليكم
ما شاء الله ... بجعبتك الكثير لنتعلمه منك P: اخي المبرمج SMP3
إقتباس : في الحقيقة الموضوع طويل جدا ... و هناك نوع (اختصاص ) من المبرمجون خاص به 'optimization engineer'
طيب لو اردت ان اتعلم اسااسيات هذا الاختصااص , بما اني مبرمج على الاقل ساكون على داريه باسباب بطئ برامجي ...
ماذا يجب ان اعرف ؟
وهل يوجد كتب او مقالات تتحدث بهذا الاختصااص ؟
إقتباس : * أحد الشروط المهمة و التي تحدد نجاح البرنامج من فشله .. هي المراجعة الأخيرة للتطبيق , أغلب المبرمجين يتجاهلون هذه النقطة .. مما ينتج عنه تطبيق مليئ بال Bug !!
صدقت @@" ... احياانا اتجاهل هذه النقطة
شكراً لك على توضيح وضيفه الدالة ProcessMessages ...
فعلاً ... كان المبرمج الذي سئلته يعمل على برنامج يوجد به جزء يستخدم الـ "Controls Graphics"
سؤال آخير هل يوجد اوامر تعمل بنفس عمل الـ ProcessMessages , اوش من هذا النوع من الاوامر ؟
وجزاك الله خير وكتبه ما تقدمه في موازين حسناتك , وزادك علماً فوق علمك اضعاف مضاعفه .
وعذراً على الإثقال , وشكراً لحسن القراءة
المشاركات : 632
المواضيع 66
:
: 6
الإنتساب : Jul 2010
عبد الهادي كتب :لكن استاذنا الفاضل ، الدالة وان لم تكن دالة تسريع بحتة فهي في معني تنقيص الانتظار، وهذا نوع من التسريع الجزئي
أم تصوري لكلامكم خاطيء فالرجاء التصحيح؟
ولكن خالص الشكر
إقتباس :عند استعمالك لل ProcessMessages فأنت تجبر الكونترول على التحول للقيادة اليدوية
.. (لن يتم انتظار وصول الرسائل الى الكونترول حتى يتم الانتقال الى الدورة 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
المشاركات : 632
المواضيع 66
:
: 6
الإنتساب : Jul 2010
إقتباس :ماذا يجب ان اعرف ؟
وهل يوجد كتب او مقالات تتحدث بهذا الاختصااص ؟
كما قلت لك سابقا الموضوع طويل جدا ...
لن تجد الكثير من المواضيع التي تتحدث عن 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
المشاركات : 3,703
المواضيع 101
:
: 579
الإنتساب : Feb 2008
السلام عليكم
تسريع البرنامج يبدأ من مرحلة التفكير/التصميم...اختيار الخواريزميات وما شابه
ثم عند تقدم البرمجة او اقتراب الانتهاء تاتي مرحلة الProfilling بتحليل البرنامج ومعرفة الاجزاء التي تاخذ وقت وتغييرها او تعديلها باخرى اسرع
المشاركات : 77
المواضيع 7
:
: 0
الإنتساب : Mar 2013
أنني فهمت الامر الان فجزاك الله خيرا استاذنا الكريم ، وانا ممتن لك كثيرا