kết quả từ 1 tới 7 trên 7

so sánh dữ liệu giữa 2 datagridview và thêm vào datagridview mới nhưng quá chậm

  1. #1
    Ðến Từ
    Bình Định
    Thành Viên Thứ: 319067
    Giới tính: Nam
    Bài gửi
    15

    so sánh dữ liệu giữa 2 datagridview và thêm vào datagridview mới nhưng quá chậm

    Em code để so sánh cột 1 của datagirdview1 và cột 1 của datagirdview2 rồi đổ vào datagirdview3 như dươi:

    for (int i = 0; i < dataGridView1.RowCount - 1; i++)
    {
    for (int j = 0; j < dataGridView2.RowCount - 1; j++)
    {
    if(dataGridView1[0, i].Value.ToString()==dataGridView2[0, j].Value.ToString())
    {
    string[] row={ dataGridView1[0, i].Value.ToString() };
    dataGridView3.Rows.Add(row);
    }
    }
    }

    Nếu j < 300 thì chạy ổn, nhưng nếu lớn hơn thì cứ đứng máy. Ở đây dữ liệu của dataGridView1 và dataGridView2 đều hơn 10.000 dòng.
    Anh chị nào rành về c# hướng dẫn xử lý code giúp em để em xử lý nhanh hơn. Em cảm ơn !
    Quick reply to this message Trả lời       

  2. #2
    Ðến Từ
    Đà Nẵng
    Thành Viên Thứ: 361750
    Giới tính: Nam
    Bài gửi
    2.211

    Reply: so sánh dữ liệu giữa 2 datagridview và thêm vào datagridview mới nhưng quá chậm

    cho việc xử lý vào 1 thread, như thế nó sẽ chạy ngầm.
    ngoài ra, nên load tất cả dữ liệu 2 bảng 1 và 2 ra List<Object>
    tạo 1 list rỗng kiểu data của grid 3, rồi đổ dữ liệu cần chèn vào grid 3 vào đấy.
    xử lý xong hết, đem dữ liệu của list đó add range vào grid 3 1 lượt

    nếu muốn tính trường hợp nhiều dữ liệu hơn thì có thể chia ra từng block 100 row 1 lần, hoặc 1000 row...
    "Above the best
    improve yourself
    your spirit never die..."


  3. Đã cảm ơn snowolf901:


  4. #3
    Ðến Từ
    Bình Định
    Thành Viên Thứ: 319067
    Giới tính: Nam
    Bài gửi
    15

    Reply: so sánh dữ liệu giữa 2 datagridview và thêm vào datagridview mới nhưng quá chậm

    Anh có thể nói rõ hơn giúp em. Em mới mày mò về món này nên chưa hiểu nhiều về c#.

  5. #4
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

    Reply: so sánh dữ liệu giữa 2 datagridview và thêm vào datagridview mới nhưng quá chậm

    Mình ko biết ngôn ngữ này, nhưng mình nghĩ nó cũng có những data structure như C++ vậy. Cách làm của bạn có độ phức tạp O(n^2), tức là 10^8, đó là chưa kể so sánh chiều dài của string.
    Tại sao ko đưa toàn bộ data của dataGrid2 vào HashSet rồi quét từ dataGrid1 kia; sau đó so sánh rồi xuất ra dataGrid3? Vì dữ liệu tối đa là 10^4 nên phép so sánh trên HashSet đảm bảo O(1). Cách này chỉ có độ phức tạp O(n), hoặc cùng lắm là O(n log n) nếu dùng tree implementation.

    Mình có cảm giác ko lẽ các bạn dùng ngôn ngữ cấp cao chỉ biết "sức trâu" mà ko dùng thuật toán; phải chăng đây là nguyên nhân software ngày nay càng lúc càng chậm?
    LCD: 13.3" 1920x1080 IPS
    CPU: Intel i7 - 4700MQ (2.4 GHz - 3.4 GHz)
    GPU: Nvidia GTX 765m with GDDR5 2GB
    RAM: 2x8GB G.Skill 2133
    HDD: Samsung SSD 850 Pro 512 GB
    2 kg.

  6. #5
    Ðến Từ
    Đà Nẵng
    Thành Viên Thứ: 361750
    Giới tính: Nam
    Bài gửi
    2.211

    Reply: so sánh dữ liệu giữa 2 datagridview và thêm vào datagridview mới nhưng quá chậm

    Trích Nguyên văn bởi mailonline.vt Xem bài viết
    Anh có thể nói rõ hơn giúp em. Em mới mày mò về món này nên chưa hiểu nhiều về c#.
    ý tưởng thôi mà bạn
    về cơ bản code của bạn ko sai, nhưng hiệu suất sẽ bị chậm. tăng hiệu suất có nhiều cách, kinh nghiệm của bạn tăng thì sẽ tự biết cách cải thiện.
    Còn về thread thì bạn phải tìm hiểu sâu về đa luồng trong C#, nó khá hại não

  7. #6
    Ðến Từ
    Đà Nẵng
    Thành Viên Thứ: 361750
    Giới tính: Nam
    Bài gửi
    2.211

    Reply: so sánh dữ liệu giữa 2 datagridview và thêm vào datagridview mới nhưng quá chậm

    Trích Nguyên văn bởi tengiday Xem bài viết
    Mình ko biết ngôn ngữ này, nhưng mình nghĩ nó cũng có những data structure như C++ vậy. Cách làm của bạn có độ phức tạp O(n^2), tức là 10^8, đó là chưa kể so sánh chiều dài của string.
    Tại sao ko đưa toàn bộ data của dataGrid2 vào HashSet rồi quét từ dataGrid1 kia; sau đó so sánh rồi xuất ra dataGrid3? Vì dữ liệu tối đa là 10^3 nên phép so sánh trên HashSet đảm bảo O(1). Cách này chỉ có độ phức tạp O(n), hoặc cùng lắm là O(n log n) nếu dùng tree implementation.

    Mình có cảm giác ko lẽ các bạn dùng ngôn ngữ cấp cao chỉ biết "sức trâu" mà ko dùng thuật toán; phải chăng đây là nguyên nhân software ngày nay càng lúc càng chậm?
    bởi thuật toán là 1 thứ ko phải ai cũng áp dụng được. và số lượng chức năng cần giải quyết quá nhiều ko cho phép đủ thời gian để ngồi nghĩ giải pháp về hiệu suất

  8. #7
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

    Reply: so sánh dữ liệu giữa 2 datagridview và thêm vào datagridview mới nhưng quá chậm

    Trích Nguyên văn bởi snowolf901 Xem bài viết
    bởi thuật toán là 1 thứ ko phải ai cũng áp dụng được. và số lượng chức năng cần giải quyết quá nhiều ko cho phép đủ thời gian để ngồi nghĩ giải pháp về hiệu suất
    Bạn nói đúng, trong nhiều trường hợp thì productivity quan trọng hơn performance. Tuy nhiên, ngay bài này, với O(n^2) (phép xử lý lên tới 10^8) và O(n) (phép xử lý chỉ 10^4), mình tin tưởng với bất kỳ ai thì sự chênh lệch này là hoàn toàn xứng đáng để thay đổi. Khi dùng thread như cách của bạn thì số phép xử lý đâu có thay đổi, nhưng bạn chỉ làm nhiều việc một lúc.

    Mình biết những cty lớn luôn luôn có ng` tối ưu về mấy đoạn code này. Câu hỏi của OP thể hiện rất rõ là đang muốn improve performance.