نمایش نتایج 1 تا 6 از 6

نام تاپیک: افزایش سرعت لود اطلاعات توی گرید

  1. #1

    افزایش سرعت لود اطلاعات توی گرید

    سلام
    فرض کنید تو برنامه یه کویری نوشتیم که 6 7 تا تیبل رو با هم جوین میکنه و حاصل کار که میشه حدود 200 هزارتا رکورد با حدود 150 تا فیلد رو میریزیم داخل یه دیتاتیبل و توی یه گرید نمایش میدیم. این عملیات بسته به سرعت سیستم حدود 30 40 ثانیه و گاهی بیشتر! زمان میبره. حالا میخام بدونم غیر از نوشتن کویری و دیتاتیبل آیا راه دیگه ای وجود داره که سرعت اجرا رو بیشتر کنه؟ مثلا ویو یا استورپروسیژر یا هر راه دیگه ای؟

    پ.ن: لطفا نگین چه لزومی داره اینهمه رکورد و فیلد رو یه جا باهم نمایش بدی و غیر حرفه ایه و منطقی نیست و ... میدونم ولی گاهی پیش میاد مجبــــــــــــــــــــــ ورم!!

  2. #2

    نقل قول: افزایش سرعت لود اطلاعات توی گرید

    اینکه اون 200 هزار رکورد از کجا میاد و چجوری ساخته میشه به کنار، ولی برای گرید حتما باید paging استفاده کنین.

    گرید استاندارد مستقیما امکان paging نداره و باید در سطح sql انجام بدین ولی کمپوننت ها معمولا اون رو پشتیبانی میکنن.

  3. #3

    نقل قول: افزایش سرعت لود اطلاعات توی گرید

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    اینکه اون 200 هزار رکورد از کجا میاد و چجوری ساخته میشه به کنار، ولی برای گرید حتما باید paging استفاده کنین.

    گرید استاندارد مستقیما امکان paging نداره و باید در سطح sql انجام بدین ولی کمپوننت ها معمولا اون رو پشتیبانی میکنن.
    پیجینگ در سطح SQL رو توضیح بدین لطفا. اگه ممکنه یه مثال یزنین

  4. #4

    نقل قول: افزایش سرعت لود اطلاعات توی گرید

    نمونه در همین انجمن زیاد هست؛ برای paging / pagination / row_number جستجو کنین

    اتفاقا یک تاپیک مشابه هم در همین همسایگی تاپیک شما هست که نمونه کد هم گذاشته شده

    https://barnamenevis.org/showthread....=1#post2423816

  5. #5

    نقل قول: افزایش سرعت لود اطلاعات توی گرید

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    نمونه در همین انجمن زیاد هست؛ برای paging / pagination / row_number جستجو کنین

    اتفاقا یک تاپیک مشابه هم در همین همسایگی تاپیک شما هست که نمونه کد هم گذاشته شده

    https://barnamenevis.org/showthread....=1#post2423816

    ممنون از پیگیریتون. ولی اینجوری فایده نداره. این مدلی داده ها رو تقسیم میکنه به چندین صفحه و مثلا اگر کاربر بخاد فیلدی رو فیلتر کنه فقط تو همون صفحه فیلتر اعمال میشه نه تو تمام رکوردها!
    باید بگونه ای باشه که کل داده هارو کابر بتونه روشون مدیریت داشته باشه

  6. #6
    کاربر دائمی
    تاریخ عضویت
    تیر 1391
    پست
    809

    نقل قول: افزایش سرعت لود اطلاعات توی گرید

    نقل قول نوشته شده توسط a.1397 مشاهده تاپیک
    ممنون از پیگیریتون. ولی اینجوری فایده نداره. این مدلی داده ها رو تقسیم میکنه به چندین صفحه و مثلا اگر کاربر بخاد فیلدی رو فیلتر کنه فقط تو همون صفحه فیلتر اعمال میشه نه تو تمام رکوردها!
    باید بگونه ای باشه که کل داده هارو کابر بتونه روشون مدیریت داشته باشه
    ممکنه زمانی که برای خواندن تمامی داده ها لازمه زیاد باشه، خیلی اوقات هم نمیشه برای کاهش زمان کاری کرد.
    ولی لزومی نداره که تا خواندن آخرین رکورد چیزی نمایش ندید، کاربر رو با چیزی که فعلا بدست اومده مشغول کنید، می توانید به صورت تدریجی بخونید و نمایش بدید و حتی به روش دلخواه تون نتیجه رو فیلتر کنید.


    Imports System.ComponentModel

    Public Class Form1
    Private dg As DataGridView
    Private WithEvents bw As BackgroundWorker
    Private pb As ProgressBar

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    bw = New BackgroundWorker
    bw.WorkerReportsProgress = True
    dg = New DataGridView
    dg.ReadOnly = True
    dg.AllowUserToAddRows = False
    dg.Columns.Add("ColumnId", "Id")
    dg.Columns.Add("ColumnTitle", "Title")
    dg.Columns.Add("ColumnVarA", "VarA")
    dg.Columns.Add("ColumnVarB", "VarB")
    dg.Columns.Add("ColumnVarC", "VarC")
    dg.Parent = Me
    dg.Dock = DockStyle.Fill
    dg.RowHeadersVisible = False
    pb = New ProgressBar
    pb.Parent = Me
    pb.Dock = DockStyle.Bottom
    bw.RunWorkerAsync()
    End Sub

    Private Sub bw_DoWork(sender As Object, e As DoWorkEventArgs) Handles bw.DoWork
    Dim i As Integer, n As Integer, count As Integer
    Dim rows As New List(Of DataGridViewRow)
    count = 200000
    Dim rnd As New Random
    Do While (n < count)
    rows.Clear()
    For i = 1 To 10000
    n += 1
    Dim row As New DataGridViewRow
    row.CreateCells(dg)
    row.SetValues(n, "title " & n, rnd.Next(), rnd.Next(), rnd.Next())
    rows.Add(row)
    If (n = count) Then Exit For
    Next
    System.Threading.Thread.Sleep(2000)
    bw.ReportProgress(100.0 * n / count, rows.ToArray())
    Loop
    End Sub

    Private Sub bw_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles bw.ProgressChanged
    Dim rows() As DataGridViewRow = CType(e.UserState, DataGridViewRow())
    pb.Value = e.ProgressPercentage
    dg.Rows.AddRange(rows)
    End Sub

    Private Sub bw_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles bw.RunWorkerCompleted
    pb.Visible = False
    End Sub
    End Class


تاپیک های مشابه

  1. پاسخ: 2
    آخرین پست: پنج شنبه 05 مهر 1397, 21:03 عصر
  2. سوال: ثبت ساعت توی فیلد از روی ساعت سیستم
    نوشته شده توسط hf.farhadi در بخش Access
    پاسخ: 6
    آخرین پست: جمعه 26 فروردین 1390, 23:41 عصر
  3. سوال: جمع ساعت توی گزارش
    نوشته شده توسط hf.farhadi در بخش Access
    پاسخ: 9
    آخرین پست: دوشنبه 08 فروردین 1390, 12:21 عصر
  4. می خوام توی تاریخ و سا عت خاصی متنی نمایش داده بشه
    نوشته شده توسط mehdi_kamari در بخش طراحی وب (Web Design)
    پاسخ: 3
    آخرین پست: چهارشنبه 21 فروردین 1387, 17:34 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •