تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
اعاني من بطئ بتحميل البيانات داخل الداتا جيرد يوجد لدي اكثر من 100 الف صف
#1
السلام عليم اخوتي يوجد لدي اكثر من 100.000 الف صف بقاعدة البيانات عندما اقوم بتحميل البيانات داخل 2 داتا جيرد فيو اعاني من تاخر بالوقت هل يوجد طريقة تعديل الكود ادناه لتسريع العميلة وشكرا ...


PHP كود :
 '< الإتصال بقاعدة البيانات
    Dim conn As New OleDbConnection(ConfigurationManager.ConnectionStrings("LAUNDRY_SYSTEM.My.MySettings.Laundry_DatabaseConnectionString").ConnectionString)
    Dim dt As New DataTable
    Dim Cmd As New OleDbCommand()
    Dim dr As DataRow
    Dim rdr As OleDbDataReader



  Using Cmd As New OleDbCommand("SELECT billnumber,nameseller,customername,mobilenumber,receiveddate,paymentstatus,paymenttype,dataofpayment,pec,total,discount,VAT,totalamount,amountreceived,remaningamount,Order_status FROM Customers1", conn)
            Cmd.CommandType = CommandType.Text
            Using sda As New OleDbDataAdapter(Cmd)
                Using dt As New DataTable()
                    sda.Fill(dt)
                    Customers1DataGridView.DataSource = dt
                End Using
            End Using
        End Using

  Using Cmd As New OleDbCommand("SELECT productA,itemnumber,price,Total,billnumber FROM Customers", conn)
                Cmd.CommandType = CommandType.Text
                Using sda As New OleDbDataAdapter(Cmd)
                    Using dt As New DataTable()
                        sda.Fill(dt)
                        CustomersDataGridView.DataSource = dt
                    End Using
                End Using
            End Using 
الرد }}}
تم الشكر بواسطة:
#2
لتسريع عملية تحميل البيانات في DataGridView عندما تكون قاعدة البيانات تحتوي على عدد كبير من الصفوف (أكثر من 100,000 صف)، يمكنك اتباع النصائح التالية لتحسين الأداء:

استخدام التحميل الجزئي للبيانات (Paging):
قم بتحميل البيانات على دفعات (pagination) بدلاً من تحميل جميع الصفوف دفعة واحدة. يمكنك تحميل عدد معين من الصفوف (مثل 1000 صف) وعند الحاجة تحميل المزيد.

استخدام الخلفية (Background Worker):
استخدم خلفية عملية لتحميل البيانات بشكل غير متزامن بحيث يمكن للمستخدم التفاعل مع واجهة المستخدم أثناء تحميل البيانات.

تحسين الاستعلامات:
تأكد من أن الاستعلامات الخاصة بك فعالة. استخدام الفهارس المناسبة في قاعدة البيانات يمكن أن يحسن الأداء بشكل كبير.

التحسينات العامة في DataGridView:
قم بإيقاف الرسم التلقائي (AutoSizeColumnsMode) وخصائص الفرز التلقائي (AutoGenerateColumns) حتى يتم تحميل البيانات بالكامل.

إليك كيفية تطبيق بعض هذه النصائح في الكود الخاص بك:

تطبيق التحميل الجزئي للبيانات (Paging):
يمكنك تعديل الاستعلامات الخاصة بك لاستخدام LIMIT و OFFSET (إذا كانت قاعدة بياناتك تدعمها) لتحميل عدد محدد من الصفوف.

استخدام الخلفية لتحميل البيانات:
يمكنك استخدام BackgroundWorker لتحميل البيانات في الخلفية:

PHP كود :
Imports System.ComponentModel
Imports System
.Data.OleDb

Public Class Form1
    Private Sub LoadData
()
 
       ' Create a background worker
        Dim worker As New BackgroundWorker()
        AddHandler worker.DoWork, AddressOf worker_DoWork
        AddHandler worker.RunWorkerCompleted, AddressOf worker_RunWorkerCompleted
        worker.RunWorkerAsync()
    End Sub

    Private Sub worker_DoWork(sender As Object, e As DoWorkEventArgs)
        Dim connStr As String = ConfigurationManager.ConnectionStrings("LAUNDRY_SYSTEM.My.MySettings.Laundry_DatabaseConnectionString").ConnectionString
        Dim dt1 As New DataTable()
        Dim dt2 As New DataTable()

        Using conn As New OleDbConnection(connStr)
            conn.Open()

            ' 
Load first data table
            Using cmd1 
As New OleDbCommand("SELECT billnumber, nameseller, customername, mobilenumber, receiveddate, paymentstatus, paymenttype, dataofpayment, pec, total, discount, VAT, totalamount, amountreceived, remaningamount, Order_status FROM Customers1"conn)
 
               Using sda1 As New OleDbDataAdapter(cmd1)
 
                   sda1.Fill(dt1)
 
               End Using
            End Using

            
' Load second data table
            Using cmd2 As New OleDbCommand("SELECT productA, itemnumber, price, Total, billnumber FROM Customers", conn)
                Using sda2 As New OleDbDataAdapter(cmd2)
                    sda2.Fill(dt2)
                End Using
            End Using
        End Using

        e.Result = New DataSet()
        DirectCast(e.Result, DataSet).Tables.Add(dt1)
        DirectCast(e.Result, DataSet).Tables.Add(dt2)
    End Sub

    Private Sub worker_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
        Dim ds As DataSet = DirectCast(e.Result, DataSet)
        Customers1DataGridView.DataSource = ds.Tables(0)
        CustomersDataGridView.DataSource = ds.Tables(1)
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        LoadData()
    End Sub
End Class 


تحسين DataGridView:

يمكنك إيقاف بعض الخصائص لتحسين الأداء:

PHP كود :
Customers1DataGridView.AutoSizeColumnsMode DataGridViewAutoSizeColumnsMode.None
Customers1DataGridView
.AutoGenerateColumns False
CustomersDataGridView
.AutoSizeColumnsMode DataGridViewAutoSizeColumnsMode.None
CustomersDataGridView
.AutoGenerateColumns False 

باستخدام هذه النصائح، يمكنك تحسين أداء تحميل البيانات في DataGridView عندما يكون لديك عدد كبير من الصفوف في قاعدة البيانات.
غَزة شجرة سنديان لا تنحني، ووردة لا تذبل، وشوكة عصية على الكسر. غزة، دماؤها تنتصر على السيف والسياف.
متغيب لفترة ان اخطأت بحق احد ارجو المسامحة
الرد }}}
تم الشكر بواسطة: justforit , justforit , moh61
#3
ما رايك بان تتطلع على المثال فهو يستخدم اكواد التصفح.
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
الرد }}}
تم الشكر بواسطة: غزة العزة , moh61 , moh61 , moh61
#4
جزاك الله خييير الجزاء ووفقك الله

طيب كيف اسوي تحديث لل DataSource  اذا اضفت صفوف جديدة من فورم اخر ... بدل ما احمل البيانات من جديد مرة اخرى  .. فقط احمل الصفوف الجديدة يعمل تحديث لحاله

وهل في اماكانية اسوي فلترة  داخل الداتا جيرد فيو بدلا من الداتا سورس
كيف اقدر اعديل على الكود هذا
PHP كود :
TryCast(CustomersDataGridView.DataSourceDataTable).DefaultView.RowFilter _
              
String.Format("billnumber =" Textbox1.Text""
الرد }}}
تم الشكر بواسطة:
#5
لتحديث DataSource بدون إعادة تحميل البيانات بالكامل، يمكنك استخدام الدوال التابعة لـ DataTable مثل Add، Remove، و Modify لإضافة، حذف، وتعديل الصفوف في DataTable. إليك كيف يمكنك القيام بذلك:

إضافة صف جديد:
يمكنك استخدام الدالة Add لإضافة صف جديد إلى DataTable:

PHP كود :
' قم بإضافة صف جديد إلى DataTable
Dim newRow As DataRow = dt1.NewRow()
newRow("billnumber") = "1234"
newRow("nameseller") = "John Doe"
قم بتعبئة الصف بالبيانات الأخرى
dt1
.Rows.Add(newRow

حذف صف:

يمكنك استخدام الدالة Remove لحذف صف معين من DataTable:

PHP كود :
' قم بحذف الصف المحدد بواسطة الفهرس
dt1.Rows.RemoveAt(0) ' 
على سبيل المثال، لحذف الصف الأول 

تعديل البيانات في صف موجود:

يمكنك تعديل البيانات في صف موجود بواسطة الفهرس:

PHP كود :
' تعديل القيمة في العمود "nameseller" بالصف الأول
dt1.Rows(0)("nameseller") = "Jane Doe" 

بعد إجراء الإضافات أو التعديلات أو الحذف، ستقوم DataTable بالتحديث تلقائيًا. لذا، لا يلزم إعادة تعيين DataSource لـ DataGridView.

أما بالنسبة للفلترة، بإمكانك استخدام DataView لتطبيق فلترة على DataTable وعرض النتيجة في DataGridView بدلاً من تعديل الـ RowFilter مباشرة في DataTable:

PHP كود :
' إنشاء DataView وتطبيق الفلترة
Dim dataView As New DataView(dt1)
dataView.RowFilter = "billnumber = '
1234'" ' تطبيق الفلترة

' عرض النتيجة في DataGridView
Customers1DataGridView.DataSource = dataView 

باستخدام DataView، يمكنك تطبيق الفلترة وإعادة عرض النتيجة دون التأثير على البيانات الأصلية في DataTable. 

آمل ان اكون قد وفقت بالاجابة على استفسارك
غَزة شجرة سنديان لا تنحني، ووردة لا تذبل، وشوكة عصية على الكسر. غزة، دماؤها تنتصر على السيف والسياف.
متغيب لفترة ان اخطأت بحق احد ارجو المسامحة
الرد }}}
تم الشكر بواسطة: moh61 , moh61


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  ممكن ايضاح اكثر لـ continu for justforit 6 303 05-11-25, 12:10 AM
آخر رد: justforit
  [سؤال] يوجد مثال|كيف نعيد صياغة نص ليكون تاريخ مقبول justforit 7 283 01-11-25, 10:54 PM
آخر رد: justforit
  [سؤال] طريقة توسيط النص داخل اداة comboBox سمير1404 7 3,831 24-08-25, 01:01 PM
آخر رد: أبو خالد الشكري
  تصدير البيانات إلى ملف RTF مصمم هاوي 4 816 15-08-25, 04:13 PM
آخر رد: أبو خالد الشكري
  [VB.NET] ما هو أفضل موقع استضافة لقواعد البيانات MSSQL ؟ mmaalmesry 0 791 16-07-25, 10:45 PM
آخر رد: mmaalmesry
  مساعدة في كيفية ترحيل البيانات من داتا قريدفيو إلى داتا قريدفيو في فيجوال بيسك ahmedfa71 13 2,193 09-07-25, 11:24 PM
آخر رد: أبو خالد الشكري
  مشكلة في حفظ البيانات مصمم هاوي 2 1,017 30-06-25, 08:51 AM
آخر رد: مصمم هاوي
  بطء في جلب البيانات مصمم هاوي 9 985 08-05-25, 07:51 AM
آخر رد: مصمم هاوي
  تعديل كود تحديث البيانات مصمم هاوي 1 775 26-04-25, 06:07 PM
آخر رد: مصمم هاوي
Photo لايمكن تعرف على تنسيق قاعدة البيانات الدريساوي 2 692 26-04-25, 12:24 AM
آخر رد: الدريساوي

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


يقوم بقرائة الموضوع: