الرئيسية      أرشيف المقالات       المنتدى        المكتبة       إتصل بنا
  القائمة الرئيسية
  Language
  تسجيل الدخول
اسم المستخدم :

كلمة المرور :

تذكرني



هل نسيت كلمة المرور ؟

اشترك الآن !
  بحث
  أقسام المقالات
  آخر المشاركات
  كتب جديدة
 
  زوار هذه الصفحة
اليوم 30
أمس 72
الإجمالي 26652
  الموقع

دلفي -  شكرا دلفي 2005
بواسطة عروة عيسى في 2005/6/3 (4628 قراءة)
دلفي

شكرا دلفي 2005
ميزة Function and procedure inlining

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



إبدأ دلفي 2005
إختر
file > new > other
ثم اختر console application من الجزء الأيمن
(Delphi projects group ) ل win32 console
أو (delphi for .net projects)ل .net console



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

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 ... جميل جدا ,,
 سرعة من دون ضريبة أحب هذه المفاجآت


شكرا دلفي ..



 

لمناقشة المقالة بحرية راجع المنتدى :

اضغط هنا

التقييم: 0.00 (0 أصوات)
**** تحضير للطباعة أرسل هذه المقالة
أضف هذه المقالة إلى المواقع التالية
إضافة إلى Blinklist إضافة إلى del.icio.us إضافة إلى Digg إضافة إلى Fark إضافة إلى Furl إضافة إلى Newsvine إضافة إلى Reddit إضافة إلى Simpy إضافة إلى Spurl إضافة إلى Yahoo مرجع إلى Balatarin مرجع إلى Faceboom مرجع إلى Twitter مرجع إلى Scripstyle مرجع إلى Stumble مرجع إلى Technorati مرجع إلى Mixx مرجع إلى Myspace مرجع إلى Designfloat _NW_BOOKMARK_TO_GOOGLEPLUS _NW_BOOKMARK_TO_GOOGLEREADER _NW_BOOKMARK_TO_GOOGLEBOOKMARKS
التعليقات تخص صاحبها ولا تخص ادارة الموقع
الكاتب الموضوع




عروة نت 2003-2016 . بالاعتماد على زوبس