Bài dễ và nhỏ như thế mà bu đông dữ. Với em, tối ưu là thuật toán. Còn những chi tiết nhỏ nhặt thì thầy em bảo sẽ có người làm thay. Cái chính là thuật toán. Mọi người thích tối ưu sao không ai vào bài viết này ủng hộ quan điểm của anh tengiday nhỉ và lựa 1 bài vô cùng đơn giản để "ra uy"?
Con gà ghét nhau vì tiếng gáy!!!
HTML:
https://vfo.vn/t/showthread.php?114045-so-sanh-du-lieu-giua-2-datagridview-va-them-vao-datagridview-moi-nhung-qua-cham
Đoạn code của bạn gunshot9x chỉ thêm dấu ngoặc -> tối ưu???
Nếu đọc mà hiểu sai ý là do các bạn hiểu sai (tự đọc, tự hiểu)
Tối ưu là rất tốt, 1 bài toán phải tính hết trường hợp có thể xảy ra để tránh bug, ủng hộ aloxinh_nb, if lồng if (delta) bạn làm chưa hết
Cái trên chỉ bổ sung điều bạn aloxinh_nb thôi nha bạn (if lồng if giảm bớt công đoạn xét không cần thiết thay vì phải xét full trường hợp), bạn không để ý những điều nhỏ nhặt mà sao tối ưu được. Mình chẳng quan tâm mức phức tạp của thuật toán, cái đó do mấy người đi trước khái quát lại thành lưu đồ để dễ dàng phân tích, nói tên gọi thuật toán (nếu đã học qua) là biết sẽ biết ngay nó chạy ra sao, nguyên tắc chung chỉ cần tuân thủ: chia để trị, giảm công việc phải thực hiện,quản lý tài nguyên cấp phát chặt chẽ thì tự nhiên sẽ được tối ưu hay công việc đó còn gọi là xây dựng thuật toán (giải thuật)
Còn vấn đề bạn mắc phải là do thằng DataGridView khi datasource có dữ liệu lớn, khoảng 10.000 đến 100.000 dòng thì control này bắt đầu build chậm (
mỗi đối tượng trong control .NET tối ưu trong một mức độ nhất định, chứ không phải là toàn năng)
Có 2 cách để giải quyết:
1. là chuyển sang dùng control khác chẳng hạn như ObjectListView
2. hướng dẫn của Microsoft giúp cải thiện hiệu suất khi dùng dataGridView với Big Data
https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/performance-tuning-in-the-windows-forms-datagridview-control
Còn
code so sánh do bạn duyệt toàn bộ dataGridView1 (n1) đem so sánh với dataGridView2 (n2) dẫn tới phải thực hiện n1*n2 công việc dù có tìm thấy hay không, tự nhiên lãng phí tài nguyên vì lệnh so sánh str
==str(m), dù tìm thấy rồi vẫn cứ thực hiện cho hết vòng lặp
Nhìn thuật toán bạn viết thì đề bài sẽ như sau:
Input: cho dataGridView1, dataGridView2
Output: Tìm dữ liệu cùng tồn tại trong cả 2 (dataGridView1, dataGridView2) lưu vào dataGridView3
xử lý đầu vào
dataGridView1, dataGridView2 loại bỏ dữ liệu trùng lặp nếu có tồn tại (có thể dùng Sort sắp xếp, so sánh dòng liền kề để xóa dữ liệu trùng)
tìm dữ liệu trùng
for
tìm n phần tử đầu dataGridView1 có chứa trong dataGridView2 có thể dùng IndexOf và chỉ cần xét vùng dữ liệu vừa lọc, giống thì add vào dataGridView3, rồi bỏ qua vòng đó, xét qua vòng mới luôn mà khỏi cần xét hết toàn bộ dữ liệu lọc (trong for chứa break để dừng vòng lặp đó, không cần thực hiện tiếp nữa, cấu trúc for(break/continue) cũng giống if(else) hay được dùng để tối ưu xử lý)