lần đầu đăng bài nhờ giúp cải thiện tốc độ cho code (viết bằng chát Gpt)

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

tienhung2150

Thành viên mới
Tham gia
13/1/17
Bài viết
3
Được thích
0
Sub DieuChinhChieuCaoDong1()

Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim chieuCao As Double
Dim soDong As Long
Dim kichThuocGiay As Double
Dim kichThuocrongGiay As Double
Dim leTren As Double
Dim leDuoi As Double
Dim letrai As Double
Dim lephai As Double
Dim firstRow As Long
Dim startRow As Long
Dim endRow As Long
Dim totalRows As Long

kichThuocrongGiay = 8.5
kichThuocGiay = 11
leTren = 0.75
leDuoi = 0.75
letrai = 0.75
lephai = 0.5

Set ws = ActiveSheet
chieuCaoDong1To6 = 0
For i = 1 To 6
chieuCaoDong1To6 = chieuCaoDong1To6 + ws.Rows(i).RowHeight / 73 ' Chuy?n don v? t? points sang inches
Next i

chieuCaoDong2To5 = 0
For i = 2 To 5
chieuCaoDong2To5 = chieuCaoDong2To5 + ws.Rows(i).RowHeight / 73 ' Chuy?n don v? t? points sang inches
Next i


tile = ws.PageSetup.Zoom / 100

MsgBox tile

' Tìm dòng cu?i cùng có giá tr? c?t T là 1
lastRow = ws.Cells(ws.Rows.count, "T").End(xlUp).Row
firstRow = ws.Cells(7, "T").End(xlDown).Row

' Tính s? dòng c?n di?u ch?nh
soDong = firstRow - 6 ' B? di 6 dòng t? 1 d?n 6

' Tính chi?u cao c?n d?t cho t?ng dòng
chieuCao = (kichThuocGiay - leTren - leDuoi - chieuCaoDong1To6 * tile) / soDong / tile

' Ði?u ch?nh chi?u cao cho các dòng t? 7 d?n firstRow
For i = 7 To firstRow
ws.Rows(i).RowHeight = chieuCao * 73 ' Ð?i don v? t? inches sang points
Next i

' Tìm dòng b?t d?u và dòng k?t thúc c?a m?i kho?ng có giá tr? c?t T
startRow = firstRow + 1
For i = firstRow + 1 To lastRow
If ws.Cells(i, "T").value <> "" Then
endRow = i
totalRows = endRow - startRow + 1
' Tính chi?u cao c?n d?t cho các dòng trong kho?ng này
chieuCao1 = (kichThuocGiay - leTren - leDuoi - chieuCaoDong2To5 * tile) / totalRows / tile
' Ði?u ch?nh chi?u cao cho các dòng trong kho?ng này
For j = startRow To endRow
ws.Rows(j).RowHeight = chieuCao1 * 73 ' Ð?i don v? t? inches sang points
Next j
startRow = i + 1
End If
Next i

End Sub
 
Sub DieuChinhChieuCaoDong1()

Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim chieuCao As Double
Dim soDong As Long
Dim kichThuocGiay As Double
Dim kichThuocrongGiay As Double
Dim leTren As Double
Dim leDuoi As Double
Dim letrai As Double
Dim lephai As Double
Dim firstRow As Long
Dim startRow As Long
Dim endRow As Long
Dim totalRows As Long

kichThuocrongGiay = 8.5
kichThuocGiay = 11
leTren = 0.75
leDuoi = 0.75
letrai = 0.75
lephai = 0.5

Set ws = ActiveSheet
chieuCaoDong1To6 = 0
For i = 1 To 6
chieuCaoDong1To6 = chieuCaoDong1To6 + ws.Rows(i).RowHeight / 73 ' Chuy?n don v? t? points sang inches
Next i

chieuCaoDong2To5 = 0
For i = 2 To 5
chieuCaoDong2To5 = chieuCaoDong2To5 + ws.Rows(i).RowHeight / 73 ' Chuy?n don v? t? points sang inches
Next i


tile = ws.PageSetup.Zoom / 100

MsgBox tile

' Tìm dòng cu?i cùng có giá tr? c?t T là 1
lastRow = ws.Cells(ws.Rows.count, "T").End(xlUp).Row
firstRow = ws.Cells(7, "T").End(xlDown).Row

' Tính s? dòng c?n di?u ch?nh
soDong = firstRow - 6 ' B? di 6 dòng t? 1 d?n 6

' Tính chi?u cao c?n d?t cho t?ng dòng
chieuCao = (kichThuocGiay - leTren - leDuoi - chieuCaoDong1To6 * tile) / soDong / tile

' Ði?u ch?nh chi?u cao cho các dòng t? 7 d?n firstRow
For i = 7 To firstRow
ws.Rows(i).RowHeight = chieuCao * 73 ' Ð?i don v? t? inches sang points
Next i

' Tìm dòng b?t d?u và dòng k?t thúc c?a m?i kho?ng có giá tr? c?t T
startRow = firstRow + 1
For i = firstRow + 1 To lastRow
If ws.Cells(i, "T").value <> "" Then
endRow = i
totalRows = endRow - startRow + 1
' Tính chi?u cao c?n d?t cho các dòng trong kho?ng này
chieuCao1 = (kichThuocGiay - leTren - leDuoi - chieuCaoDong2To5 * tile) / totalRows / tile
' Ði?u ch?nh chi?u cao cho các dòng trong kho?ng này
For j = startRow To endRow
ws.Rows(j).RowHeight = chieuCao1 * 73 ' Ð?i don v? t? inches sang points
Next j
startRow = i + 1
End If
Next i

End Sub
Viết bằng chat GPT thì hỏi tiếp nhờ ChatGPT cải thiện
bạn hỏi chat GPT rồi, hỏi tiếp nó, thì nó sẽ hiểu hơn người nhất là lặng im chẳng biết câu hỏi mục đích code là gì
 
Hỏi thêm vàì AI khác...
Đây là câu trả lời của Bing...

Xin chào! Để cải thiện tốc độ của code, bạn có thể áp dụng một số kỹ thuật tối ưu hóa code. Tối ưu hóa code là việc sử dụng một số kỹ thuật và phương pháp để code hoặc sửa đổi code sẵn có nhằm mục đích nâng cao chất lượng và hiệu năng của chương trình. Tùy vào từng ngữ cảnh cụ thể mà tối ưu hóa code có thể được thực hiện để làm cho chương trình/phần mềm trở nên:
  • Chạy nhanh hơn.
  • Sử dụng ít tài nguyên (CPU, memory) hơn.
  • Kích thước chương trình (code size) nhỏ hơn.
  • Dễ bảo trì, dễ đáp ứng với sửa đổi hơn.
Tối ưu hóa code được chia thành 2 cấp độ là high-level và low-level. Tối ưu ở cấp độ high-level được thực hiện thủ công bởi lập trình viên, họ sẽ sử dụng các kỹ thuật tối ưu vào việc xây dựng các hàm, lớp, các vòng lặp… Tối ưu ở mức độ low-level được thực hiện tự động bởi trình biên dịch, nó được thực hiện khi trình biên dịch dịch source code sang ngôn ngữ máy.
Để tìm hiểu thêm về các kỹ thuật tối ưu hóa code, bạn có thể xem bài viết này của CppDeveloper. Bài viết này giới thiệu một số kỹ thuật và phương pháp để optimize code thủ công ở cấp độ high-level.
Hy vọng điều này giúp ích cho bạn!


Bạn có thể cho tôi một số ví dụ về kỹ thuật high-level optimization được không?

Searching for: high-level optimization examples
Searching for: high-level optimization examples
Generating answers for you…
Generating answers for you…
Tối ưu hóa code ở cấp độ high-level thường được thực hiện bằng cách sử dụng các kỹ thuật tối ưu hóa vào việc xây dựng các hàm, lớp, các vòng lặp… Ví dụ về các kỹ thuật tối ưu hóa code ở cấp độ high-level bao gồm:
  1. Inlining: Thay thế một lời gọi hàm bằng thân hàm.
  2. Partial evaluation: Sử dụng các kỹ thuật như reordering of a loop, alignment of arrays, padding, layout, và elimination of tail recursion để tối ưu hóa code.
  3. Loop unrolling: Tách một vòng lặp thành nhiều vòng lặp nhỏ hơn để giảm số lần kiểm tra điều kiện trong vòng lặp.
  4. Code motion: Di chuyển các phép tính không phụ thuộc vào giá trị của vòng lặp ra khỏi vòng lặp để giảm số lần tính toán.
Bạn có thể tìm hiểu thêm về các kỹ thuật tối ưu hóa code ở cấp độ high-level tại đây.
Hy vọng điều này giúp ích cho bạn!
 
...
Để tìm hiểu thêm về các kỹ thuật tối ưu hóa code, bạn có thể xem bài viết này của CppDeveloper. Bài viết này giới thiệu một số kỹ thuật và phương pháp để optimize code thủ công ở cấp độ high-level.
...
Cpp hoàn toàn khác VBA.
Cách optimise code của C++ khác với VBA, không đem ra làm ví dụ để học được.

1. C++ là ngôn ngữ có trình dịch (compiler) dịch ra ngôn ngữ máy, sau đó trình nối (linker) nối các chỗ gọi hàm. Cuối cùng là có một cái exe để chạy.
Trong khi đó, VBA là ngôn ngữ trình giải (interpreter) chạy đến câu nào thì mới dịch câu nấy.
Điển hình, C++ mới có chuyện hàm inline. Nhiều ngôn ngữ khác không có.
(JavaScript cũng có hàm inline)

2. Đối với C++, 4 điều kể trên thuộc về code refactor. Chưa phải là high-level.
Dân cải tiến tốc độ code phải đào sâu hơn thế nhiều. Ví du:
- Sử dụng STL, thư viên rất hiệu quả của C++
- Hy sinh dộ tổng quát, không sử dụng tối đa tính chất đa hình để giảm thiểu việc tra Virtual Table. (*1)
- Theo dõi các hàm copy, copy cạn và copy sâu. Điều này rất quan trọng khi hàm được gọi có tham số là object. Complier cần biết cách truy chiếu có cần copy object? Nếu một object chứa hằng triệu bytes dữ liệu loại phức tạp thì một lần copy sâu (clone) ảnh hưởng đến tốc độ. (*2)
- Còn nhiều vấn đề khác

(*1) Virtual Table: bảng kết nối thuộc tính của class. Bình thường thì linker đã nối trước trong exe. Nhưng với thuộc tính loại virtual thì link vào lúc chạy, code xét dối tượng rồi mới nối.
Có thể tạm so sánh với cách kết nối trễ của VBA. Ai cũng biết kết nối sớm thì chạy nhanh hơn trễ, nhưng bù lại không uyển chuyển.
Chuyện hy sinh một số luật để tăng tốc là chuyện thường tình của dân cao cấp. Điển hình CCSDL LH thì tối thiểu phải đạt chuẩn bậc 3, nhưng các tay chủ Dbase lão luyện vẫn hy sinh xuống bậc 2 để tăng tốc.

(*2) Dữ liệu đơn giản như mảng (mảng của dữ liệu đơn giản, không phải objects) thì copy rất nhanh. Khi copy một mảng 1 triệu số nguyên thì code chỉ việc tạo phần bộ nhớ cho mảng và copy cả cụm. Nhưng những kiểu khác thì như danh sách kiên kết thì chúng đâu có nằm liên tiếp nhau trong bộ nhớ, và phải copy từng node (sử dụng STL hiệu quả hơn).

(*3) Copy sâu, hay clone, là cách copy trọn vẹn. Đối tượng copy ra in hệt như đối tượng được copied. Nhưng hai đối tượng độc lập nhau.
Copy cạn (shallow copy) cho ra đối tượng copy cũng in hệt. Nhưng các thuộc tính chỉ được copy địa chỉ. Thay đổi thuộc tính của đối tượng này có thể ảnh hưởng đối tượng kia.
 
Web KT
Back
Top Bottom