PDA

View Full Version : So sánh tốc độ VB.Net và C#



lazy-programmer
20-02-2003, 16:11
Vừa rồi Lazyman có so sánh tốc độ tính toán của VB.Net và C#. Nhiều bạn không tin là có sự chênh lệch hàng nghìn lần về tốc độ tính toán các phép tính phức tạp nên mình post lên source code của cả hai class viet bang VB.Net va C# để tính lịch Âm - Dương. Các bạn load về, tạo thêm các project mới và add các tập tin gởi kèm vào để thử. Vì cả hai là dạng lib (.DLL) nên để thử các bạn cần thêm một project winform nữa.

Đại khái là một form có vài controls như textbox để hiển thị kết quả tính toán và thời gian chạy, hai button để chạy các tính toán. Tôi có làm một cái, dưới đây là trích code trong cái form ấy (gồm hai events khi nhấn hai nút Calculate) để các bạn có thể sử dụng các lib này:




Dim V1 As New VietCalLibByVB.Vietnamese()
Dim G1 As New VietCalLibByVB.Gregorian()

Dim V2 As New VietCalLib.Vietnamese()
Dim G2 As New VietCalLib.Gregorian()

Private Sub btnCalcualateByVB_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles btnCalculateByVB.Click
Dim t1, t2 As Date
Dim i As Integer

Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
t1 = Now
For i = 1 To 10
G1.fromFixed(V1.newYear(Me.DateTimePicker1.Value.Y ear))
Next
t2 = Now

Me.txtResultByVB.Text = G1.day.ToString & "/" & _
G1.month.ToString & "/" & G1.year.ToString
Me.txtTimeByVB.Text = (t2.Ticks - t1.Ticks) / 100000
Me.Cursor = System.Windows.Forms.Cursors.Default
End Sub

Private Sub btnCalcualteByC_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles btnCalculateByC.Click
Dim t3, t4 As Date
Dim i As Integer

t3 = Now
For i = 1 To 10
G2.fromFixed(V2.newYear(Me.DateTimePicker1.Value.Y ear))
Next
t4 = Now

Me.txtResultByC.Text = G2.day.ToString & "/" & _
G2.month.ToString & "/" & G2.year.ToString
Me.txtTimeByC.Text = (t4.Ticks - t3.Ticks) / 100000
End Sub



Đây là phép tính ra ngày Tết AL của các năm, kết quả là ngày Dương lịch tương ứng.

Các bạn nhớ AddReference đến hai thư viện VietCalLibByVB và VietCalLib (cái này bằng C#). Kết quả được tính bằng 1/100s. Để đảm bảo tính chinh xác các bạn cho chạy vài lần với các năm 2003, 2004, 2005 rồi tính trung bình (năm 2004 là năm có tháng AL nhuận nên tính toán mất nhiều thời gian hơn).

Tôi tin là có sự chênh lệch hàng nghìn lần (tùy theo máy của bạn), nhưng cũng xin lạm bàn một chút về chuyện các ngôn ngữ:

Thứ nhất: C# chỉ nhanh hơn VB.Net trong việc tính toán phức tạp, không quá vượt trội trong các ứng dụng WinForm thuần túy.

Thứ hai: Tuy không nên viết một chương trình cờ tướng thuần túy bằng VB.Net (các bạn cứ thử viết Simple Chinese Chess với độ sâu 7 và chờ máy tính đi xem!!!) nhưng môi trường pt của VB lại hết sức thân thiện. Các IntelliSense nhanh nhạy, đầy đủ. Các event có thể tự động phát sinh. Còn ở C# bạn phải làm thủ công hầu hết mọi việc. Đôi khi chỉ có nước là xem cấu tạo của các events bên VB rồi chuyển sang C#.

Thứ ba: C# thiếu các hàm bổ trợ, đôi khi rất cần khi phải pt nhanh u/dụng như các hàm tính toán về DateTime như DateAdd(), DateDiff(), các hàm chuyển đổi dạng dữ liệu trực tiếp như CInt(), CStr()... Bạn cũng phải tự tạo các hàm này nếu muốn có được môi trường pt thân thiện hơn.

Thứ tư: Pt bằng C# chắc chắn sẽ có ít các lỗi vô tình hơn vì đây là một ngôn ngữ có yêu cầu cao về việc chuyển đổi dữ liệu và sự chặt chẽ trong cú pháp. Hơn nữa, viết bằng C# cũng uyển chuyển hơn trong việc khai báo biến, tiết kiệm được nhiều sự rườm ra không cần thiết trong khi viết mã. Giá phải trả là chương trình trở nên khó hiểu hơn, nếu các bạn kg comments đầy đủ.

Thứ năm: C# hỗ trợ các class tốt hơn với các từ khóa static mà nhờ đó bạn có thể s/d trực tiếp các hàm mà không cần tạo ra các instant của lớp đó và nhiều tiện ích khác.

Tóm lại: VB.Net sẽ thích hợp cho việc pt các WinForm và để giảng dạy/ viết các tutorial. Còn C# nên dành cho các bạn có thiên tư trong hardcoding, và x/d các lib đòi hỏi tình toán nhiều.

Đây chỉ là một vài so sánh có tính hơi "bề ngoài". Mong các bạn góp ý.

[dww@ - thông tin chỉnh sửa : cho xuống hàng vài đoạn code dài quá để giảm chiều ngang các bài viết]

lazy-programmer
20-02-2003, 16:17
Sorry, diễn đàn này hiện kg cho post các file lên, bạn nào có "hứng" thú thì mình se gởi qua e-mail source code của ct này vậy.

consoilangthang
20-02-2003, 19:42
Bài viết được gửi bởi lazy-programmer
Tôi tin là có sự chênh lệch hàng nghìn lần (tùy theo máy của bạn), nhưng cũng xin lạm bàn một chút về chuyện các ngôn ngữ:

tôi không tin có sự chênh lệch hàng nghìn lần đối với 2 ngôn ngữ được thiết kế & viết compiler bởi cùng một hãng (M$), cho cùng một platform (.NET). Dẫu biết hai team phát VB.NET và C# là hai team khác nhau, sự khác biệt không thể khủng khiếp đến thế. Có lẽ điều này chỉ có thể tin nổi khi bác Bill đứng kế bên tôi và thét vào tai tôi điều kinh hoàng đó. :D


Bài viết được gửi bởi lazy-programmer
Thứ nhất: C# chỉ nhanh hơn VB.Net trong việc tính toán phức tạp, không quá vượt trội trong các ứng dụng WinForm thuần túy.

tính toán phức tạp là tính toán như thế nào ? bác lazy@ xin chỉ rõ. Đồng ý là với một số cú pháp đặc biệt, C# compiler sinh ra code tối ưu có tốc độ vượt hơn cú pháp thông thường. Ví dụ :


int a = 0xbaadc0de; // foo number
a += 0xc001babe; // C family syntax (1)
a = a + 0xc001babe; // traditional VB syntax (2)

ở đoạn code (1), C# compiler sinh ra IL tốt hơn ở đoạn code (2)(thông tin lấy từ một high-rated article tại www.codeproject.com). Tuy vậy, VB.NET giờ đây đã hỗ trợ cả syntax (1). Và tôi đoán rằng VB.NET compiler cũng sẽ sinh mã tốt hơn với syntax này.


Bài viết được gửi bởi lazy-programmer
...nhưng môi trường pt của VB lại hết sức thân thiện. Các IntelliSense nhanh nhạy, đầy đủ. Các event có thể tự động phát sinh. Còn ở C# bạn phải làm thủ công hầu hết mọi việc. Đôi khi chỉ có nước là xem cấu tạo của các events bên VB rồi chuyển sang C#.

e rằng bạn quá chủ quan khi đưa ra nhận xét này. VS.NET cung cấp cách thiết lập events cho C# tuyệt hay thông qua chính Properties Explorer, cũng chỉ là click mouse và chờ code sinh ra thôi. Giao diện kiểu property cho phép programmer sort các events theo Category để chọn lựa, thậm chí còn có cả quick description cho mỗi event. Cách thức chọn events của VB.NET giống như VB6, có lẽ do M$ không muốn thay đổi quá nhiều phong cách lập trình (sẽ khiến cho VB6 programmer, especially, novice chùn lòng - ý kiến chủ quan của tôi). Nhưng rõ ràng, cách thức mà M$ chọn cho C# ưu việt hơn hẳn.

Cái thiếu sót đáng tiếc nhất là C# thiếu Intellisense cho enumerations. Tuy nhiên, that's not a problem. :D


Bài viết được gửi bởi lazy-programmer
Thứ ba: C# thiếu các hàm bổ trợ, đôi khi rất cần khi phải pt nhanh u/dụng như các hàm tính toán về DateTime như DateAdd(), DateDiff(), các hàm chuyển đổi dạng dữ liệu trực tiếp như CInt(), CStr()... Bạn cũng phải tự tạo các hàm này nếu muốn có được môi trường pt thân thiện hơn.

các hàm tương ứng đều có trong BCL/FCL, xin dùng MSDN. Các hàm bạn vừa nêu được M$ sinh ra để tạo hơi hướm VB6 cho VB.NET mà thôi. Dùng các hàm riêng của VB.NET (namespace Microsoft.VisualBasic) sẽ có hại cho programmer khi code ngôn ngữ .NET khác. Sử dụng các hàm chuẩn BCL/FCL, ta có thể vô tư chạy tới chạy lui các ngôn ngữ .NET vì các hàm chuẩn luôn được các ngôn ngữ target .NET hiểu.


Bài viết được gửi bởi lazy-programmer
Thứ tư: Pt bằng C# chắc chắn sẽ có ít các lỗi vô tình hơn vì đây là một ngôn ngữ có yêu cầu cao về việc chuyển đổi dữ liệu và sự chặt chẽ trong cú pháp. Hơn nữa, viết bằng C# cũng uyển chuyển hơn trong việc khai báo biến, tiết kiệm được nhiều sự rườm ra không cần thiết trong khi viết mã. Giá phải trả là chương trình trở nên khó hiểu hơn, nếu các bạn kg comments đầy đủ.

tùy người thôi, như tôi đây ghét code VB cực kỳ bởi cái sự rườm ra End If, End For, Exit Sub, Exit Function..... nên có tốc độ đọc code C-like language tốt hơn code VB :D


Bài viết được gửi bởi lazy-programmer
Thứ năm: C# hỗ trợ các class tốt hơn với các từ khóa static mà nhờ đó bạn có thể s/d trực tiếp các hàm mà không cần tạo ra các instant của lớp đó và nhiều tiện ích khác.

VB.NET có từ khoá Shared tương đương static của C#. Trong trường hợp này, bạn đánh giá quá thấp VB.NET rồi :D


Bài viết được gửi bởi lazy-programmer
Tóm lại: VB.Net sẽ thích hợp cho việc pt các WinForm và để giảng dạy/ viết các tutorial. Còn C# nên dành cho các bạn có thiên tư trong hardcoding, và x/d các lib đòi hỏi tình toán nhiều.
Đây chỉ là một vài so sánh có tính hơi "bề ngoài". Mong các bạn góp ý.

Tóm lại là sao bây giờ ? :D

White_Rose
21-02-2003, 02:18
Bài viết được gửi bởi lazy-programmer
...nhưng môi trường pt của VB lại hết sức thân thiện. Các IntelliSense nhanh nhạy, đầy đủ. Các event có thể tự động phát sinh. Còn ở C# bạn phải làm thủ công hầu hết mọi việc. Đôi khi chỉ có nước là xem cấu tạo của các events bên VB rồi chuyển sang C#.Chọn control mình muốn, click vào Events ở cửa sổ Properties (hình tia sét vàng), cuộn xuống event cần viết code và double click.
Sau này cần chỉnh sửa lại, chỉ cần vô đó, chọn ở cột bên phải danh sách các control có event này. Rất tiện và nhanh.

lazy-programmer
21-02-2003, 11:49
Cảm on cả hai bạn soilangthang va White_Rose, các nhận xét của các bạn đều xác đáng cả. Như vậy mới đúng là tinh thần của một diendantinhoc.com chứ, chỉ có điều phần post lên của diễn đàn này bị chặn lại nên khó có thể trao đổi các mã nguồn với các bạn được. Thân Chào!

consoilangthang
21-02-2003, 12:24
đáng tiếc là tên vikhoa@ quá dở về PHP, nếu không hắn hẳn nên set quyền ưu tiên upload file lớn cho một số thành viên như bác lazy@ hay WR@. Như thế anh em mới trao đổi và học tập lẫn nhau tốt được.

happy coding, happy debugging !

bpmtri
21-02-2003, 12:55
Lúc trước có nghe Vikhoa nói vụ FTP gì mà sao bi giờ im re luôn rồi không thấy nữa. Trên mạng có nhiều chỗ cho host free với dung lượng lớn, ai biết thì đăng ký một cái rồi cùng upload/download chung.

fully9x
04-06-2012, 09:38
Dùng chung 1 Framework, chung 1 bộ visual, đều đc phát hành 2001 bởi MS, tôi viết cả 2 ngôn ngữ và ko thấy sự khác biệt ngoài cú pháp của chúng. Bạn so sánh làm gì vậy ?
Ai hợp với kiểu viết nào thì chọn ngôn ngữ đó thôi.

dhaudo
05-06-2012, 22:03
so sánh nhảm quá =))

nino
11-07-2012, 13:22
thread gần 10 năm mà còn lôi lên vậy trời