Home      Articles archive       Forum        Library       Contact us
  Main Menu
  اللغة
  Log in
Username:

Password:

Remember me



Lost Password?

Register now!
  Search
  Article Topics
  Last Posts
 
  New Books
  This Page Visitors
Today 10
Yesterday 34
Total 60992
  Site

Delphi -  شكرا دلفي 2005
Posted by Orwah Issa on 2005/6/3 (4879 reads)
Delphi

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


شكرا دلفي ..



 

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

اضغط هنا

Rating: 0.00 (0 votes)
**** Printer friendly page Send this story to a friend
Bookmark this article at these sites
Bookmark to Blinklist Bookmark to del.icio.us Bookmark to Digg Bookmark to Fark Bookmark to Furl Bookmark to Newsvine Bookmark to Reddit Bookmark to Simpy Bookmark to Spurl Bookmark to Yahoo Bookmark to Balatarin Bookmark to Facebook Bookmark to Twitter Bookmark to Scripstyle Bookmark to Stumble Bookmark to Technorati Bookmark to Mixx Bookmark to Myspace Bookmark to Designfloat Bookmark to Google Plus Bookmark to Google Reader Bookmark to Google Bookmarks
The comments are owned by the author. We aren't responsible for their content.
Author Thread




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