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

كيف يمكنني الوصول الى البيانات بسرعة ؟
مثلا :
لديا ملف من نوع record يحتوي على ارقام بطاقات + اسمائها
كيف يمكنني الوصول الى البطاقة رقم 10 واظهار إسمها بدون استعمال هده الطريقة :
C_NX = 10
PHP كود :
function Open_Card_N(C_NX : integer):Tcard; // function Open card
  
var
    
F : file of TCard;
    
TempCard : TCard;
  
begin
    format_card
(TempCard);
    
Assignfile(F, File_Name);
    
REset(F);
    while 
Not EoF(f) do
      
begin
        read
(f,TempCard);
        if 
C_NX = TempCard.Card_Number then
          begin
            result
:=TempCard;
            
Closefile(f);
            Exit;
          
end;
      
end; 
يعني بدون اجراء loop فهيا تضيع الوقت
افيدونا بايي طريقة اخرى تكون اسرع افادكم الله
بارك الله فيكم
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#2
لا مفر من الـ Loop.
يمكن تسريع العمل بأن يتم قراءة الملف مرة واحدة ووضعه في حيز Buffer، ثم البحث داخل هذا الحيز في الذاكرة.
مع ملاحظة أن ويندوز تقوم بنسخ أي ملف تتم قراءته من القرص في cash memory ذاكرة وقتية، وبالتالي فالقراءة الثانية تكون من هذه الذاكرة.
حل آخر أن يكون هناك ملف فهرس لملف البيانات فيه بيانات موقع التسجيلة المطلوبة داخل ملف البيانات.

فيما يلي توليف، يقوم بقراءة الملف باستخدام TMemoryStream


PHP كود :
function GetCardByNumberEx(ANumber: integer): TCard;
var
  
TempCard: TCard;
  
MStream: TMemoryStream;
  
iFileSize: cardinal;
  
iRecordSize: integer;
  
iRcordCont: integer;
  
i: integer;
begin

  FillChar
(result, Sizeof(result), #0);

  
if FileExists(FILE_NAME) then
  begin
    iRecordSize 
:= Sizeof(TCard);

    
MStream := TMemoryStream.Create;
    try
      
MStream.LoadFromFile(FILE_NAME);

      
iFileSize := MStream.Size;
      
iRcordCont := iFileSize div iRecordSize;

      
MStream.Seek(0, 0);
      for 
i := 1 to iRcordCont do
      
begin
        MStream
.Read(TempCard, iRecordSize);

        if 
TempCard.Number_card = ANumber then
        begin
          result 
:= TempCard;
          break;
        
end;

      
end;

    finally
      
MStream.Free;
    
end;
  
end

end
; 
الرد
#3
بارك الله فيك على هده المعلومات القيمة
اخي الكريم ممكن تشرح هدا الكود
PHP كود :
MStream.Seek(0, 0); 

إقتباس :حل آخر أن يكون هناك ملف فهرس لملف البيانات فيه بيانات موقع التسجيلة المطلوبة داخل ملف البيانات.
ممكن تعطيني متال عن كيفية استخدام هدا الحل بارك الله فيك
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم