منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
اعاني من بطئ بتحميل البيانات داخل الداتا جيرد يوجد لدي اكثر من 100 الف صف - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : اعاني من بطئ بتحميل البيانات داخل الداتا جيرد يوجد لدي اكثر من 100 الف صف (/showthread.php?tid=48854)



اعاني من بطئ بتحميل البيانات داخل الداتا جيرد يوجد لدي اكثر من 100 الف صف - moh61 - 26-05-24

السلام عليم اخوتي يوجد لدي اكثر من 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 



RE: اعاني من بطئ بتحميل البيانات داخل الداتا جيرد يوجد لدي اكثر من 100 الف صف - غزة العزة - 26-05-24

لتسريع عملية تحميل البيانات في 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 عندما يكون لديك عدد كبير من الصفوف في قاعدة البيانات.


RE: اعاني من بطئ بتحميل البيانات داخل الداتا جيرد يوجد لدي اكثر من 100 الف صف - justforit - 27-05-24

ما رايك بان تتطلع على المثال فهو يستخدم اكواد التصفح.


RE: اعاني من بطئ بتحميل البيانات داخل الداتا جيرد يوجد لدي اكثر من 100 الف صف - moh61 - 27-05-24

جزاك الله خييير الجزاء ووفقك الله

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

وهل في اماكانية اسوي فلترة  داخل الداتا جيرد فيو بدلا من الداتا سورس
كيف اقدر اعديل على الكود هذا
PHP كود :
TryCast(CustomersDataGridView.DataSourceDataTable).DefaultView.RowFilter _
              
String.Format("billnumber =" Textbox1.Text""



RE: اعاني من بطئ بتحميل البيانات داخل الداتا جيرد يوجد لدي اكثر من 100 الف صف - غزة العزة - 27-05-24

لتحديث 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. 

آمل ان اكون قد وفقت بالاجابة على استفسارك