دلفي, ما أسرع تسجيل الوصول الأسلوب في TcxGrid أو TDataSet

StackOverflow https://stackoverflow.com/questions/4080196

  •  28-09-2019
  •  | 
  •  

سؤال

أنا باستخدام دلفي 2007 TcxGrid لإظهار محتويات ملف المكتبة.قاعدة بيانات المنازل المعلومات حول نوع الملف, اسم, مسار, والإرشاد.

في الاختبار أنا تحميل 1700 السجلات في الشبكة من خلال TDataSet.أنا أيضا جعل غرفة في الشبكة لمدة 3 أكثر المجالات التي تحتاج بعد أن تكون محسوبة.فهي إذا كانت الملفات موجودة حجم الملف وتاريخ التعديل.

هدفي هو أن تظهر للمستخدم كافة المعلومات المخزنة (الذي يعمل كبيرة و بسرعة) ثم في مؤشر ترابط خلفية العثور على معلومات أخرى ثلاثة حقول البيانات ومن ثم إدراجها في TcxGrid.هذا السؤال له إذا كان قليلا لا علاقة مع خيوط أقوم به.تعمل بشكل جيد.

مشكلتي هي أن الوصول إلى الحقول في الشبكة التي شيدت بالفعل ضخم التباطؤ عندما كنت الوصول إليه.لقد حاولت اثنين من طرق مختلفة ...

  1. الشبكة.DataController.القيم[RecordIndex,FieldIndex] - ولكن هذا هو البديل وأظن هذا هو السبب في أنه بطيء جدا

  2. الشبكة.DataController.DataSet.FindFirst الشبكة.DataController.DataSet.FindNext الشبكة.DataController.DataSet.الحقول[FieldIndex] ولكن باستخدام هذا "تسعى" الأسلوب هو فقط بطيئة مثل الطريقة الأولى حاولت.حدد موقع ثم moveby بطيئة أيضا.

طالما السؤال باختصار ، ما هي أسرع طريقة للوصول إلى سجل ؟

هل كانت مفيدة؟

المحلول 3

تحديث قانون يلزم في البدء/نهاية التحديث كان مشكلة كبيرة.

شكرا لك يفن لتعليقك كما كان حل مشكلتي.و شكرا لك جاد دانيال الردود التي تعلمت من.

هذا من شأنه أن يكون أكثر وضوحا للجميع تم أمس نشر بعض التعليمات البرمجية.

نصائح أخرى

ويرجى أيضا ذكر ما إذا كنت تستخدم TcxGridDBTableView أو TcxGridTableView?

أعتقد أن استخدام غير db علم TcxGridTableView أو TcxBandedGridTableView مع

عرض.DataController.القيم[RecordIndex, FieldIndex] هو الأسرع.

حتى إذا كان لديك db التطبيق يمكنك تحميل غير db نسخة من رأي في التهيئة و من التعامل مع DataController الأحداث للكشف عن تغييرات البيانات والقضايا المعنية أوامر SQL تحديث قاعدة البيانات الخاصة بنا.

يمكنك ملء عرض مثل هذا:

class procedure TForm1.FillView(const View: TcxGridBandedTableView; const Sql: string);
var
  Reader: TMyOrmDataReader;
  i: Integer;
begin
  Assert(Assigned(View), 'View is not assigned parameter.');
  with View.DataController do
  begin
    BeginFullUpdate;
    try
      Reader := TMyOrm.GetDataReader(SQL);
      try
        i := 0;
        RecordCount := 50 * 1000; // make it something big in order to avoid constant resizing by 1
        while Reader.Read do
        begin
          // Fill the view
         Values[i,  0] := Reader.GetInt32(0);
         Values[i,  1] := Reader.GetString(1);
         Inc(i);
        end;
        RecordCount := i - 1;
      finally
        Reader.Free;
      end;
    finally
      EndFullUpdate;
    end;
  end;
end;

ومن ثم الوصول إلى قيم مثل:

View1.DataController.Values[View1.DataController.FocusedRecordIndex, View1Column1.Index].AsString

يمكنك العمل مع الجدول/مجموعة البيانات الأولى إلحاق البيانات المفقودة ومن ثم تظهر جميع الحقول كما datbound.

أعرف أن هذا هو الموضوع القديم ولكن سوف أذكر أن تبديل الشبكة باستخدام موفر وضع طريقة أخرى لتحسين سرعة التحميل, لأنه يتحول أساسا الشبكة التحميل في عملية افتراضية.(السجلات لم يتم تحميلها حتى أنهم يحتاجون عرض أو الوصول إلى البيانات الأخرى.) بعد ذلك ، DataController مخابئ لهم ، حتى الوصول سريع جدا تحميل مرة واحدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top