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

شكرا دلفي 2005

مغلق
بدأه ORWA في 3 يونيو 2005 · 7 رد · 740 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

شكرا دلفي 2005

ميزة Function and procedure inlining

http://www.orwah.net/modules/news/article.php?storyid=70

دعمت دلفي 2005 في كل من win32 و .net تقنية inlining والتي تعطي أداء أسرع لإستدعاء اجرائية أو تابع ما .. (أهلا بالسرعة)

فبدلا من القيام بقفزات للوصول إلى جزء الكود المتعلق كل مرة , يتم نسخ الكود إلى مكان استدعاءة مما يزيد بسرعة الإستدعاء( سأسمي ذلك Super Static Recall ), وهذه التقنية مفيدة في الأجزاء التي تستخدم ضمن حلقات طويلة تتطلب السرعة لإن تنفيذ الإجراء قد يتم مثلا بضعة مئات من المرات أو اكثر , وبالتالي التأخير الصغير جدا سيصبح مؤثرا على السرعة الكلية ....

مثال .

إبدأ دلفي 2005

إختر

file > new > other

ثم اختر console application من الجزء الأيمن

(Delphi projects group ) لتطبيق win32 consol

و (delphi for .net projects) لتطبيق .net consol

1.png

ضع الشفرة التالية :

program InlineDemo;
{$APPTYPE CONSOLE}

uses
  MMSystem;

  function Max(const X,Y,Z: Integer): Integer;
  begin
    if X > Y then
      if X > Z then Result := X
               else Result := Z
    else
      if Y > Z then Result := Y
               else Result := Z
  end;

const
  Times = 10000000; // 10 million
var
  A,B,C,D: Integer;
  Start: LongInt;
  i: Integer;

begin
  Random; // 0
  A := Random(4242);
  B := Random(4242);
  C := Random(4242);
  Start := TimeGetTime;
  for i:=1 to Times do
    D := Max(A,B,C);
  Start := TimeGetTime-Start;
  writeln(A,', ',B,', ',C,': ',D);
  writeln('Calling Max ',Times,' times took ',Start,' milliseconds.');
  readln

end.

هذا البرنامج ليس معقد أبدا أنه يستخدم التابع Max الذي يحسب العدد الأكبر لأرقام عشوائية 10 مليون مرة متتالية

سيظهر لك البرنامج عبارة تعطي الزمن بالملي ثانية الذي لزم للقيام بذلك (على جهازي أعطى 40 ملي ثانية ل win32 و 80 ملي ثانية ل .Net)

الآن لزيادة سرعة التنفيذ كل ماسنفعلة هو شيء واحد فقط .. إضافة العبارة inline; إلى آخر ترويسة التابع Max ليصبح كالتالي :

  function Max(const X,Y,Z: Integer): Integer; inline;
  begin
    if X > Y then
      if X > Z then Result := X
               else Result := Z
    else
      if Y > Z then Result := Y
               else Result := Z
  end;

سيقوم الآن مترجم الدلفي باستبدال الاستدعاء الخاص ب Max بشفرة الMax كل مرة يتم استدعاءة فيها

الآن أعد تنفيذ البرنامج بعد هذا الجزء .... مارأيك .؟؟

على جهازي أصبح التنفيذ يتم في (22 ملي ثانية لكل من win32 و .net ) أي بحدود النصف للwin32 و الربع ل.net ... جميل جدا ,, سرعة من دون ضريبة أحب هذه المفاجآت

شكرا دلفي ..

تم تعديل هذه المشاركة بواسطة ORWA في 3 يونيو 2005 في 00:16

#2

ياه هذه الميزة موجودة في ال++C/C و افتقدناها في ال#C الحمد لله ان الDelphi استخدمتها

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#3

نعم أنها من مزايا C++ .. وكنت احب هذه الميزة كثيرا عندما كنت أعمل على C++ .. وسررت بوجودها كثيرا في دلفي (.net و win32 )

يمكن ان تجد لائحة ببعض المزايا الجديدة في delphi2005 عن نسخ دلفي السابقة هنا :

http://www.orwah.net/modules/news/article.php?storyid=26

وهذا اقتباس منها :

Delphi features not in C#/CLR 
Sets, Class references 
Virtual class methods, Virtual constructors 
Class helpers 
Typeless var and out parameters 
Type aliases, typed types 
Default parameters 
Resourcestrings, named constructors, etc
#4

رائع و اروعهم في نظري الDefault Parameters لانها فعلا مهمة للغاية

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#5

كله كوم وال Operator Overloading لانه لم تعد حكرا على ++C وانا احب هذه الصفه جدا في ++C

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#6
اقتباس
شكرا دلفي 2005

ونحن نقول : شكرآ عروووة .. (h)

#7
romanof كتب:
كله كوم وال Operator Overloading لانه لم تعد حكرا على ++C وانا احب هذه الصفه جدا في  ++C

الOperator Overloading موجودة في ال#C

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#8

شكرا يا هندسة على التوضيح

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

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

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