Trang 3/6 đầuđầu 1 2 3 4 5 6 cuốicuối
Hiển thị kết quả tìm kiếm từ 21 đến 30 trên tổng số: 56

Ðề tài: Giúp code lọc nhanh Siêu tốc độ

  1. ArrDataU đó mình để phuc vụ cho việc tìm kiếm mà không phân biệt chữ hoa chữ thường ấy.
    cái này tôi viết lại dòng đỏ ở bải trên rui, vì nhầm

    còn ý phía sau mình không hiểu
    Ý tôi là không cần phải lọc riêng các cột dữ liệu theo ArrCotDuLieu trước, mà cứ chuyển ArrData0 gốc cùng ArrCotDuLieu vào code Filter - vì ta không cần phải lọc riêng trước vậy, vì sau cũng phải nhặt (filter) theo điều kiện chọn - khi đó chỉ nhặt các cột theo ArrCotDuLieu là được. ==> tiết kiệm thời gian của LOAD Data nhiều,

    Việc loadData sẽ chạy 1 lần đầu tiên dùng nhiều lần - thì tùy bạn cân nhắc ý trên

  2. Trích Nguyên văn bởi winvista View Post
    Ý tôi là không cần phải lọc riêng các cột dữ liệu theo ArrCotDuLieu trước, mà cứ chuyển ArrData0 gốc cùng ArrCotDuLieu vào code Filter - vì ta không cần phải lọc riêng trước vậy, vì sau cũng phải nhặt (filter) theo điều kiện chọn - khi đó chỉ nhặt các cột theo ArrCotDuLieu là được. ==> tiết kiệm thời gian của LOAD Data nhiều,
    đã hiểu ý sau, vậy thì phải truyền thêm tham số ArrCotDuLieu vào code lọc dữ liệu lại, đẻ viết lại rồi test lại thế nào
    cảm ơn bạn nhiều nhe ^^

  3. Nếu để nguyên code, bạn bỏ qua đo thời gian LOAD DATA
    Code:
    Sub LocCach1()
    Sheets("OUT").Range("B5").Value = ""
    LoadData
    DoThoiGianDIC 1
    End Sub
    Sub LocCach2()
    Sheets("OUT").Range("B5").Value = "T" & ChrW(202) & "N G" & ChrW(7888) & "C"
    LoadData
    DoThoiGianDIC 2
    End Sub
    Chuyển (move) loaddata từ sub LOC lên trên 2 sub LocCach1, LocCach1 - để không đo thời gian LoadData ==> bạn sẽ thấy với LocCach1 thời gian giảm chỉ còn =40% thời gian cũ; bạn sẽ thấy với LocCach2 thời gian giảm chỉ còn =25% thời gian cũ
    Điều này chứng tỏ LOAD Data chiếm quá nhiều thời gian: 60-75% của tổng thời gian

    Nên nếu tính cả thời gian LoadData thì nhanh hay chậm là do LoadDATA quyết định phần nhiều .. . (sửa cái đuôi cáo này đi, hoặc là chấp nhận do loaddata nên chạy lần đầu chậm, sau sẽ nhanh không lo --> bài toán nhỏ kiểu này không quan trong thuật toán Filter nữa đã giải quyết, vì chưa châm được điếu thuốc thì code đã xong, lo chi lăn tăn chuyện thời gian)
    ------------------------
    Sau đó tôi thử bỏ Dictionary trong clsFilter
    sử dụng Array một chiều thì thời gian giảm thêm khoảng 15-20% (cách 1) và 5-10% (với cách 2) nữa so với khi dùng DIC

    ==================
    vì trên đã viết
    (sửa cái đuôi cáo này đi, hoặc là chấp nhận do loaddata nên chạy lần đầu chậm, sau sẽ nhanh không lo --> bài toán nhỏ kiểu này không quan trong thuật toán Filter nữa đã giải quyết, vì chưa châm được điếu thuốc thì code đã xong, lo chi lăn tăn chuyện thời gian)

    Nên tôi sẽ dừng vấn đề ở đây, vì cải thiện thêm Thuật toán Filter cũng không có ích gì đáng kể
    thay đổi nội dung bởi: winvista, 16-02-17 lúc 05:32 PM

  4. Trích Nguyên văn bởi winvista View Post
    Nếu để nguyên code, bạn bỏ qua đo thời gian LOAD DATA
    Code:
    Sub LocCach1()
    Sheets("OUT").Range("B5").Value = ""
    LoadData
    DoThoiGianDIC 1
    End Sub
    Sub LocCach2()
    Sheets("OUT").Range("B5").Value = "T" & ChrW(202) & "N G" & ChrW(7888) & "C"
    LoadData
    DoThoiGianDIC 2
    End Sub
    Chuyển (move) loaddata từ sub LOC lên trên 2 sub LocCach1, LocCach1 - để không đo thời gian LoadData ==> bạn sẽ thấy với LocCach1 thời gian giảm chỉ còn =40% thời gian cũ; bạn sẽ thấy với LocCach2 thời gian giảm chỉ còn =25% thời gian cũ
    Điều này chứng tỏ LOAD Data chiếm quá nhiều thời gian: 60-75% của tổng thời gian

    Nên nếu tính cả thời gian LoadData thì nhanh hay chậm là do LoadDATA quyết định phần nhiều .. . (sửa cái đuôi cáo này đi, hoặc là chấp nhận do loaddata nên chạy lần đầu chậm, sau sẽ nhanh không lo --> bài toán nhỏ kiểu này không quan trong thuật toán Filter nữa đã giải quyết, vì chưa châm được điếu thuốc thì code đã xong, lo chi lăn tăn chuyện thời gian)
    ------------------------
    Sau đó tôi thử bỏ Dictionary trong clsFilter
    sử dụng Array một chiều thì thời gian giảm thêm khoảng 15-20% (cách 1) và 5-10% (với cách 2) nữa so với khi dùng DIC
    đã sửa lại bỏ hoàn toàn loadData, không dùng dic
    mà sao nó cũng không nhanh hơn được bao nhiêu hết chênh lệch 1 - > 2s (lọc theo cột chỉ định- lọc tất cả các cột)
    nó vẫn chậm bác à
    link

  5. Trích Nguyên văn bởi langtuchungtinh360 View Post
    đã sửa lại bỏ hoàn toàn loadData, không dùng dic
    mà sao nó cũng không nhanh hơn được bao nhiêu hết chênh lệch 1 - > 2s (lọc theo cột chỉ định- lọc tất cả các cột)
    nó vẫn chậm bác à
    link
    Kết quả đúng chưa?
    Nếu xác nhận đúng rui, thì tôi thử xem cải thiện được gì không?

  6. Trích Nguyên văn bởi winvista View Post
    Kết quả đúng chưa?
    Nếu xác nhận đúng rui, thì tôi thử xem cải thiện được gì không?
    kết quả đúng rồi bác. lạ cái là lúc code lung tung nó chạy có 700 (0.7s) mà sau khi thêm chú thích bố trí thụt dòng cho đẹp thì nó lên tới 1000 (1s). chả hiểu sao
    mà 1s đó là chỉ mới lọc theo 1 điều kiện là số 4, còn nếu là bê tông thì nó tìm "bê" rồi "tông", là x2 thời gian lận

  7. Trích Nguyên văn bởi langtuchungtinh360 View Post
    kết quả đúng rồi bác. lạ cái là lúc code lung tung nó chạy có 700 (0.7s) mà sau khi thêm chú thích bố trí thụt dòng cho đẹp thì nó lên tới 1000 (1s). chả hiểu sao
    mà 1s đó là chỉ mới lọc theo 1 điều kiện là số 4, còn nếu là bê tông thì nó tìm "bê" rồi "tông", là x2 thời gian lận
    bạn tìm kiểu này lâu là phải

    bê tông 750L

    sẽ thành tìm

    *b*ê*
    *t*ô*n*g*
    *7*5*0*L*

    xem lại cách ghép các dấu *

  8. Trích Nguyên văn bởi langtuchungtinh360 View Post
    kết quả đúng rồi bác. lạ cái là lúc code lung tung nó chạy có 700 (0.7s) mà sau khi thêm chú thích bố trí thụt dòng cho đẹp thì nó lên tới 1000 (1s). chả hiểu sao
    mà 1s đó là chỉ mới lọc theo 1 điều kiện là số 4, còn nếu là bê tông thì nó tìm "bê" rồi "tông", là x2 thời gian lận
    Chênh lệch nhau chút là do lúc ý máy tính của bạn đang tắc tịt, không phải đo hoàn toàn giống nhau đâu giao động 200/1000-300/1000s là bình thường

  9. Trích Nguyên văn bởi winvista View Post
    bạn tìm kiểu này lâu là phải

    bê tông 750L

    sẽ thành tìm

    *b*ê*
    *t*ô*n*g*
    *7*5*0*L*

    xem lại cách ghép các dấu *
    tại muốn tìm kiếm đa năng nên mới làm vậy bác ạ, kiểu nào cũng phải dùng like thì dùng * * * cho nó phê.
    ví dụ như "trách nhiệm hữu hạn", với "TNHH" thì chỉ cần gõ "tnhh" nó cũng tìm được 2 cái ấy

  10. Trích Nguyên văn bởi winvista View Post
    Chênh lệch nhau chút là do lúc ý máy tính của bạn đang tắc tịt, không phải đo hoàn toàn giống nhau đâu giao động 200/1000-300/1000s là bình thường
    vừa tắt KAP với giả lập Android chạy thử lọc tất cả cột thì 1s, còn chỉ định cột thì 0.5s (trung bình), chắc vậy là nhanh rồi, để cải tiến thêm nhiều điều kiện với cách lọc nữa ^^
    -------------------------
    xem kỹ lại, hóa ra lọc có 35k dòng mới đc thời gian đó :v, 65k dòng chắc phải gấp dôi thời gian rồi @@
    thay đổi nội dung bởi: langtuchungtinh360, 16-02-17 lúc 09:25 PM

Trang 3/6 đầuđầu 1 2 3 4 5 6 cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •