Ниже приведен мой код многопоточность где большой объем данных увеличился в 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
Вы когда-нибудь слышали о "виртуализации данных"? "Пейджинг"? Посмотреть его.