Rahul S Ghige Ответов: 1

Ниже приведен мой код многопоточность где большой объем данных увеличился в datagridview проблема производительности время выполнения уменьшилось


try
            {
                Stopwatch stpcycle = new Stopwatch();
                stpcycle.Start();
                Trace.TraceInformation("SSCCAdded on grid  {0},{1},{2}", DateTime.Now.ToString(), SSCCCode, deck.ToString());
                DataGridView DGSSCC  = RetDG(deck);
                
                if (DGSSCC == null) return;
               
                //if (DGSSCC.InvokeRequired == true)
                //{
                //    InvokeUIHandlerG d = new InvokeUIHandlerG(SSCCAdded);
                //    this.Invoke(d, new object[] { SSCCCode, deck });

                //}
                if (DGSSCC.InvokeRequired)
                {
                    InvokeUIHandlerG d = new InvokeUIHandlerG(SSCCAdded);
                    DGSSCC.BeginInvoke(d, SSCCCode, deck);
                }

                else

                {

                    string SSCC = Convert.ToString(SSCCCode);
                    string printedSSCC = string.Empty;
                    for (int i = 0; i <= DGSSCC.RowCount - 1; i++)
                    {
                        printedSSCC = (string)DGSSCC[(int)DGSSCC_Col.TertiaryUID, DGSSCC.Rows[i].Index].Value;                       
                        if (printedSSCC == SSCC || string.IsNullOrEmpty(SSCC))
                        {
                            return;
                        }
                    }

                    object[] param = new object[3];
                    Trace.TraceInformation("SSCC ADDED INdex " + (CaseStartVal + DGSSCC.Rows.Count));
                    param[(int)DGSSCC_Col.CaseNum] = (CaseStartVal + DGSSCC.Rows.Count);
                    if (Globals.JobType == PTPL.JOB.Cust_GTIN_JbTypes.CIP.ToString() && deck.IsTertiaryDeck() == false)
                        param[(int)DGSSCC_Col.TertiaryUID] = string.Empty;
                    else
                        param[(int)DGSSCC_Col.TertiaryUID] = SSCCCode;
                    param[(int)DGSSCC_Col.UIDVerified] = false;

                    DGSSCC.Rows.Add(param);

                    int Index = DGSSCC.RowCount - 1;
                    if (Globals.App_Setting.Instance.uSER_SETTINGS.IsSortVerifySSCCTabDescending)
                    {
                        Index = 0;
                        DGSSCC.Sort(DGSSCC.Columns[(int)DGSSCC_Col.CaseNum], ListSortDirection.Descending);
                    }
                    else
                    {
                        DGSSCC.Sort(DGSSCC.Columns[(int)DGSSCC_Col.CaseNum], ListSortDirection.Ascending);
                    }
                    DGSSCC.Rows[Index].Cells[(int)DGSSCC_Col.TertiaryUID].Style.Font = new Font(DGSSCC.Font, FontStyle.Regular);
                    DGSSCC.Columns[(int)DGSSCC_Col.UIDVerified].Visible = true;
                    if (deck.IsTertiaryDeck())
                        DGSSCC.Columns[(int)DGSSCC_Col.UIDVerified].ReadOnly = true;

                    if (DGSSCC.RowCount == 1)
                    {
                        DGSSCC.Rows[Index].Selected = true;
                        scrollGrid(DGSSCC);
                        DGSSCC[(int)DGSSCC_Col.UIDVerified, Index].Value = true; //for visibility issue
                        DGSSCC[(int)DGSSCC_Col.UIDVerified, Index].Value = false;
                        //UpdateParentVerification(DGSSCC[(int)DGSSCC_Col.SSCC, Index].Value.ToString(),false);
                    }
                    else
                    {
                        DGSSCC[(int)DGSSCC_Col.UIDVerified, Index].Value = false;
                    }
                    DGSSCC.Refresh();

                    Jobdeck JD = Jobdeck.RetJobDeck(deck);

                    if (JD.printer != null && JD.printer.IsLinePrinter)
                    {
                        BTN_REPRINTLast.Enabled = false;
                    }
                    else
                    {
                        if (DGSSCC.Rows.Count == 0)
                            BTN_REPRINTLast.Enabled = false;
                        else
                            BTN_REPRINTLast.Enabled = true;
                    }

                    if (DGSSCC.Rows.Count == 1)
                    {
                        dg_ColumnHeaderMouseDoubleClick(DGSSCC, null);// added for proper allignment of datagrid
                    }
                    if (Globals.App_Setting.Instance.uSER_SETTINGS.IsSortVerifySSCCTabDescending)
                    {
                        DGSSCC.Sort(DGSSCC.Columns[(int)DGSSCC_Col.CaseNum], ListSortDirection.Descending);
                    }
                }
                stpcycle.Stop();


Что я уже пробовал:

Я пробовал метод DGSSCC.InvokeRequired с идентификатором Datagridview, но все еще проблема производительности в программном обеспечении. Время выполнения увеличивается, если в DataGridView поступает большой объем данных.

Richard MacCutchan

Я не вижу никакой ссылки на многопоточность в этом коде. И сколько строк в datagridview ты говоришь?

Rahul S Ghige

Привет, Ричард, Спасибо за ответ.
О DataGridView там много строк, таких как 80000 или больше.
как я уже упоминал, я хочу только увеличить производительность, а теперь игнорирую ссылку на многопоточность. потому что этот метод занимает больше времени для выполнения, если записей больше 50000

Richard MacCutchan

Вы не можете всерьез ожидать, что ваши пользователи будут просматривать 80 000 записей, чтобы найти ту, которая их интересует. Ваш дизайн должен быть изменен.

Gerry Schmitz

Вы когда-нибудь слышали о "виртуализации данных"? "Пейджинг"? Посмотреть его.

1 Ответов

Рейтинг:
2

#realJSOP

Мой совет-найти сторонний элемент управления listview/listbox, который позволяет группировать и сортировать данные.

В противном случае загрузите все данные, но заставьте пользователя указать условия поиска и отображать только те записи, которые соответствуют критериям поиска.

Другой подход заключается в том, чтобы заставить пользователя указать условия поиска, но выполнить запрос базы данных для загрузки данных на основе этих критериев поиска (по сути, реализовать систему специальных запросов).