delphi4arab منتديات دلفي للعرب
Fast File To delphi Array - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : مصادر دلفي مفتوحة تعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=14)
+--- الموضوع : Fast File To delphi Array (/showthread.php?tid=4854)



Fast File To delphi Array - me_delphi - 09-01-2013

السلام عليكم ورحمة الله و بركاته

هدا برنامج برمجته لتحويل الملفات الى مصفوفة من البيتات وهو سريع في التحويل لاعتماده على الصنف
TStringBuilder

مرفق لكم السورس بكلا اللغتين دلفي و سي++

لكن لا حظت ان الدلفي اسرع عند التحويل رغم اني حولت السورس الى نفس الكود بلغة السي++

اترك لدوي الخبرة التجربة والمقارنة


Fast File To delphi Array - SMP3 - 11-01-2013

جميل جدا أن نرى استخدام مثل هذه الفئات الجديدة خصوصا وان هده الفئات كانت ولا تزال حكرا على مبرمجي الدوت نت ..
لقد سبق وقمت بوضع موضوع في مدونتي يتحدث عن هده الفئة (استخدام الفئة TStringBuilder )

إقتباس :لكن لا حظت ان الدلفي اسرع عند التحويل رغم اني حولت السورس الى نفس الكود بلغة السي++
أعتقد أن السبب راجع الى التغليف .. فكما يعلم الجميع أن مكتبة ال vcl & و الكلاسس الخاصة ب C++ Builder مكتوبة بالباسكال وحتى تتمكن من استخدامها فلازم يكون هناك تغليف لهده الأخيرة بلغة السي ++ ,-الكلاس TStringBuilder يحتوي على الكثير من الدوال .. كلها تم تغليفها - لدلك فمسألة التغليف لا يمكن تجاهلها
عندما تقوم بانشاء برنامج بالسي ++ بويلدر فسيتم ربطه بالباكج الخاص بدلفي مثل ال vcl

لقد سبق ووعدت شركة codegear / EMB باعادة كتابة منصة ال vcl ب السي ++ .. لكن لا أعتقد انها ستفي بوعدها .. فهدا الامر سيستغرق الكثير و الكثير من وقتها ..Big Grin

على كل حال الخيار الأمثل في مثل هده الحالات هو استخدام مكتبات ال dll المبرمجة بدلفي في برامج ال سي ++ بويلدر


Fast File To delphi Array - me_delphi - 15-01-2013

إقتباس :أعتقد أن السبب راجع الى التغليف ..

هل هو اعتقاد ام أنك متأكد أخي الكريم


Fast File To delphi Array - SMP3 - 16-01-2013

me_delphi كتب :هل هو اعتقاد ام أنك متأكد أخي الكريم

بغض النظر عن ذلك .. فالتغليف يعني اعادة التوجيه => تعليمات أسمبلي زائدة
ألق نظرة على هذا المثال
@1
PHP كود :
void DoShowMsg()
{
 
MessageBox(0,"Test",0,0);
}

void  ShwMsg()
{
 
DoShowMsg ();
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShwMsg();
} 
بعد أن تتم عملية ال Link :
PHP كود :
PUSH EBP
     MOV EBP
,ESP
     CALL Project2
.DoShowMsg  ; [Project2.DoShowMsg
    
 
; Project2.DoShowMsg Instruction :
       
PUSH EBP
       MOV EBP
,ESP
       PUSH 0                                          
; /Style = MB_OK|MB_APPLMODAL
       PUSH 0                                          
; |Title = NULL
       PUSH Project2.00458198                          
; |Text = "Test"
       
PUSH 0                                          ; |hOwner = NULL
       CALL 
<JMP.&USER32.MessageBoxA>                  ; \MessageBoxA
       POP EBP                                         
;  Project2.0040195C
       RETN


     
;End Project2.DoShowMsg  
     POP EBP                                     
     RETN 
أما اذا لم نستخدم التغليف
@2
PHP كود :
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
MessageBox(0,"Test",0,0);
} 
سيترجم الى
PHP كود :
PUSH 0                                          ; /Style = MB_OK|MB_APPLMODAL
     PUSH 0                                          
; |Title = NULL
     PUSH Project2.004581A5                          
; |Text = "Test"
     
PUSH 0                                          ; |hOwner = NULL
     CALL 
<JMP.&USER32.MessageBoxA>                  ; \MessageBoxA 
بمقارنة @1 مع @2 نلاحظ أن هناك تعليمتين اضافيتين قبل عرض الرسالة
PHP كود :
PUSH EBP
   MOV EBP
,ESP 
وتعليميتن عند النهاية :
PHP كود :
POP EBP                                     
  RETN 

للأسف فأنا لم أستطع دراسة مثالك لأني أسخدم CBuilder 2007 & Delphi XE3
يعني يمكنني تجربته فقط على دلفي

هناك شيئ آخر عند المقارنة : يجب أن تكون كلتا النسختين من نفس الصنف .. يعني
Delphi Debug vs c++Debug
or
Delphi Release vs c++ Release

هناك عامل آخر
دلفي يستخدم Object Pascal Runtime Library فقط
أما CBuilder فيستخدم C++ Runtime Library & Object Pascal Runtime Library وهذا يفسر حجم تطبيق فارغ ب السي ++ بويلدر مقارنة مع دلفي لنفس التطبيق


Fast File To delphi Array - me_delphi - 19-01-2013

إقتباس :دلفي يستخدم Object Pascal Runtime Library فقط
أما CBuilder فيستخدم C++ Runtime Library & Object Pascal Runtime Library وهذا يفسر حجم تطبيق فارغ ب السي ++ بويلدر مقارنة مع دلفي لنفس التطبيق

بار ك الله فيك أخي SMP3

هل تقصد ان حجم تطبق دلفي أصغر من سي++ بويلدر

بالنسبة لدلفي XE و س++ XE

فان تطبيق دلفي Release حجمه 896 كيلوبايت
وسي ++ Release حجمه 122 كيلوبايت
هدا فقط في تطبيق فارغ

انا لاحظت من س++ بويلدر يعطي حجما أقل رغم اعتماده على VCL كدلفي


Fast File To delphi Array - SMP3 - 19-01-2013

إقتباس :انا لاحظت من س++ بويلدر يعطي حجما أقل رغم اعتماده على VCL كدلفي
أعتقد أنك مخطأ في هذا ..
هل تأكدت من ال Runtime pkg !! لكلتا النسختين ?


Fast File To delphi Array - me_delphi - 21-01-2013

نعم أخي smp3 لقد اطلعت على الخيارات فوجدتك محقا بار ك الله فيك أخي الكريم