Tăng tốc ứng dụng viết bằng VB

Các bài viết hướng dẫn, giúp các bạn hiểu và tiếp cận với Visual Basic nhanh hơn
Đăng trả lời
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 531 times

Tăng tốc ứng dụng viết bằng VB

Gửi bài by truongphu »

Tên bài viết: Tăng tốc ứng dụng viết bằng VB
Tác giả: thuongall
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Các thủ thuật viết code giúp máy xử lý lệnh nhanh
Tăng tốc ứng dụng viết bằng VB
gửi bởi thuongall
Vấn đề 1: Sử dụng $ trong các hàm xử lý ký tự

Với các hàm xử lý ký tự bạn nên thêm ký tự $ ở cuối hàm. Tức là dùng Left$(), Ucase$()... thay vì Left(), Ucase()...
Code nhanh hơn:

Mã: Chọn tất cả

str = Left$("www.caulacbovb.com", 3)
Code chậm hơn:

Mã: Chọn tất cả

str = Left("www.caulacbovb.com", 3)
Tốc độ sử dụng $ có thể nhanh hơn 2 lần.

Vấn đề 2: Sử dụng * thay vì ^

Code nhanh hơn:

Mã: Chọn tất cả

result = x * x
Code chậm hơn:

Mã: Chọn tất cả

result = x ^ 2
Tốc độ sử dụng * có thể nhanh hơn 90 lần.

Vấn đề 3: Sử dụng \ thay vì / khi dùng số nguyên

Code nhanh hơn:

Mã: Chọn tất cả

result = 100 \ 50
Code chậm hơn:

Mã: Chọn tất cả

result = 100 / 50
Tốc độ sử dụng \ có thể nhanh hơn 7 lần.

Vấn đề 4: Sử dụng x\1 thay vì Cint(x)

Code nhanh hơn:

Mã: Chọn tất cả

result = 100.543253 \ 1
Code chậm hơn:

Mã: Chọn tất cả

result = CInt(100.543253)
Tốc độ sử dụng x\1 có thể nhanh hơn 1.5 lần.

Vấn đề 5: Luôn loại bỏ các dòng Debug.Print

Tùy vào số lượng cũng như các giá trị truyền vào Debug.Print mà tốc độ sẽ chậm đi nhiều hay ít. Tốt nhất là chúng ta nên loại bỏ những dòng này khi compile project.

Vấn đề 6: Việc dùng các biến tạm

Code nhanh hơn:

Mã: Chọn tất cả

Public Sub TestOne()    Dim I As Long, J As Long    Dim myArray(1 To 50000) As Long     For I = 1 To 50000        For J = I + 1 To 50000            If myArray(I) = myArray(J) Then            End If        Next    Next    Erase myArrayEnd Sub
Code chậm hơn:

Mã: Chọn tất cả

 Public Sub TestTwo()    Dim I As Long, J As Long    Dim myArray(1 To 50000) As Long    Dim lngTmp As Long     For I = 1 To 50000        lngTmp = myArray(I)        For J = I + 1 To 50000            If lngTmp = myArray(J) Then            End If        Next    Next    Erase myArrayEnd Sub
Tốc độ TestOne() có thể nhanh hơn 1.5 lần.

gửi bởi cuongnp
' -----------------------------------------------------------------
' Nghiêm Phú Cường
' http://www.thongtinmobile.com
' mailto:admin@thongtinmobile.com
'------------------------------------------------------------------
1. Dấu $ ở cuối hàm: Trong VB một số hàm kết thúc bởi dấu $, ví dụ Mid$, Left$,… sẽ có tốc độ xử lý nhanh hơn Mid, Left.
Lý do: Các hàm Mid, Left trả lại giá trị dạng Variant chứa chuỗi trả về, hàm Mid$, Left$ trả lại giá trị dạng String.

Ví dụ:
So sánh hai đoạn chương trình

Mã: Chọn tất cả

A: For i = 1 To 1000000 If Mid$(CStr(i), 1, 1) = "5" Then End If Next B: For i = 1 To 1000000 If Mid(CStr(i), 1, 1) = "5" Then End If Next

Đoạn A thực hiện hết 4giây, trong khi đó đoạn B thực hiện mất 5giây.

Các hàm kết thúc bởi dấu $: Chr$, ChrB$, ChrW$, Command$, Curdir$, Date$, Environ$, Error$, Format$, Hex$, LCase$, Left$, LeftB$, LTrim$, Mid$, MidB$, Oct$, Right$, RightB$, RTrim$, Space$, Str$, String$, Time$, Trim$, Trim$, Ucase$.
2. So sánh chuỗi:
So sánh chuỗi (Text) thường chậm hơn so sánh nhị phân, nên sử dụng Option Compare Binary và vbBinaryCompare để tăng tốc độ.
StrComp("Str1","str2",vbBinaryCompare )
3. Sử dụng LenB nhanh hơn “” hoặc <>””: Khi cần kiểm tra một chuỗi rỗng hoặc khác rỗng, tốc độ thực hiện nhanh hơn cả khi bạn dùng hàm LenB(). Sử dụng LenB()=0 khi kiểm tra chuỗi rỗng, và LenB()<>0 khi chuỗi khác rỗng.
4. Mở file dạng Random chậm hơn nhị phân: Truy cập Random thường chậm hơn truy cập dạng Binary. Hãy thay thế Random bằng Binary.
5. Ký hiệu “”: Ký hiệu “” thường xuất hiện trong code, nên thay thế bằng vbNullString là một giá trị Constant đặc biệt trong VB.
6. Khai báo biến rõ ràng: Một trong những đặc tính tuyệt vời của VB là kiểu dữ liệu Variant, tuy nhiên khi tạo các hệ sản phẩm, hãy hạn chế kiểu dữ liệu không rõ ràng Variant. Để có thói quen khai báo biến, hãy thêm dòng “Option Explicit” vào trong mỗi module. Các kiểu dữ liệu liệt kê dưới đây theo thứ tự từ nhanh nhất đến chậm nhất
Interger Long Single Double Currency Variant

gửi bởi luungoc2005
Thứ nhất:Nếu có nhiều trường hợp, nên dùng Select Case thay cho If - ElseIf - End If
Thứ hai:Dùng câu lệnh For - Next thay cho Do Until(Do While) - Loop
Thứ ba:Ví dụ muốn qui định caption của Command1:
A

Mã: Chọn tất cả

Dim sChuoi As String sChuoi = "Hello World" Command1.Caption = sChuoi B Command1.Caption = "Hello World" 
Đoạn mã A sẽ nhanh hơn đoạn B.Hơi nghịch lý nhưng qua thử nghiệm thấy đoạn B chậm gấp đôi đoạn A
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
kiemhanvotinh
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 58
Ngày tham gia: Thứ 5 27/03/2008 8:03 am
Đến từ: Quảng Nam
Been thanked: 1 time
Tiếp xúc:

Re: Tăng tốc ứng dụng viết bằng VB

Gửi bài by kiemhanvotinh »

Mình có bổ sung như sau:
Các kiểu giá trị quay về như Boolean, Variant, Byte, Any không có ký tự đại diện
Sau đây là các kiểu giá trị quay về và ký tự đại diện tương ứng:
String ==> $
Currency ==> @
Long ==> &
Integer ==> %
Single ==> !
Bạn nên sử khai báo kiểu giá trị cho phù hợp, như xem biến khai báo với Single hay Integer được không rùi mới nghỉ đến kiểu Long hay Currency
Cái này mong bạn giúp mình xem nó nhanh bao nhiêu lần giữa các kiểu dữ liệu với nha :D
Hình đại diện của thành viên
darkan
Thành viên chính thức
Thành viên chính thức
Bài viết: 32
Ngày tham gia: Thứ 2 21/04/2008 6:46 pm

Re: Tăng tốc ứng dụng viết bằng VB

Gửi bài by darkan »

Biến dạng long sẽ được thực hiện nhanh hơn biến dạng int.
Tài liệu có thể xem trên MSDN.
Is the moon rising...
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 531 times

Re: Tăng tốc ứng dụng viết bằng VB

Gửi bài by truongphu »

  1. Dim YesNo As Boolean
  2. Private Sub Command1_Click()
  3.     If YesNo = False Then
  4.         YesNo = True
  5.     Else
  6.         YesNo = False
  7.     End If
  8.     MsgBox YesNo
  9. End Sub


Sẽ chậm, nên dùng:

  1. Dim YesNo As Boolean
  2. Private Sub Command1_Click()
  3.     YesNo = Not YesNo
  4.     MsgBox YesNo
  5. End Sub


  1. Private Sub Command2_Click()
  2. Dim bYesNo As Boolean
  3.     Dim i As Integer
  4.     If i = 5 Then
  5.         bYesNo = True
  6.     Else
  7.         bYesNo = False
  8.     End If
  9.     MsgBox bYesNo
  10. End Sub


Sẽ chậm, nên dùng:

  1. Private Sub Command2_Click()
  2. Dim bYesNo As Boolean
  3.     Dim i As Integer
  4.     bYesNo = (i = 5)
  5.     MsgBox bYesNo
  6. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Đăng trả lời

Quay về