شكرا دلفي 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

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