Search
 
 

Display results as :
 


Rechercher Advanced Search

Latest topics
» NewBlueFx TotalFX Windows-FL | 1.11 GB
Tue Dec 17, 2013 12:42 pm by titquarra

» NewBlueFx TotalFX Windows-FL | 1.11 GB
Tue Dec 17, 2013 12:42 pm by titquarra

» Celebrity.Sex.Tape.UNCUT.&.UNRATED.2012.720p.BRrip.x264.YIFY.mp4
Tue Dec 17, 2013 8:32 am by titquarra

» Maya Autodesk Personal Learning Edition 8.5
Tue Dec 17, 2013 7:47 am by titquarra

» Tuyệt Kỹ Đong Giai Chân Kinh (tuyệt Kỹ cua trai)
Thu Aug 23, 2012 5:38 am by Admin

» Tuyệt kỹ cua giai
Thu Aug 23, 2012 5:36 am by Admin

» NETCAT.........
Mon Aug 13, 2012 6:35 am by Admin

» Bảo mật CSDL bằng phương pháp mã hóa.
Tue Apr 17, 2012 10:04 pm by Admin

» Hàm mã hóa MD5 bằng JavaScript
Tue Apr 17, 2012 10:03 pm by Admin

Shopmotion


Affiliates
free forum


Một vài điều cần lưu ý trong lập trình C#

View previous topic View next topic Go down

Một vài điều cần lưu ý trong lập trình C#

Post  Admin on Thu Mar 29, 2012 1:00 am

1.Sử dụng String.Format
Thông thường ta hay khai báo 1 biến kiểu chuỗi như sau

string query = "UPDATE User SET Name='" + name + "' WHERE Id=" + id;

Đoạn code trên nhìn khá là rắc rối,nếu để ý thì nó sẽ tạo ra 3 bản chuỗi điều này thực sự không cần thiết trong ứng dụng của bạn.
Cách làm tốt hơn là bạn nên sử dụng String.Format,nó làm cho đoạn code của bạn trông sáng sủa hơn

string query = string.Format("UPDATE User SET Name='{0}' WHERE ID={1}", name, id);

2.Sử dụng quá nhiều khối try-catch
Thông thường trong thân hàm Main ta thường gọi các hàm con , mà trong mỗi hàm con đó ta thường tạo 1 khối try-catch đễ bẫy lỗi.Bạn tham khảo đoạn code mẫu sau

public class NestedExceptionHandling
{
public void MainMethod()
{
try
{
ChildMethod1();
}
catch (Exception exception)
{
//Handle exception
}
}

private void ChildMethod1()
{
try
{
ChildMethod2();
}
catch (Exception exception)
{
//Handle exception
throw;
}
}

private void ChildMethod2()
{
try
{
//some implementation
}
catch (Exception exception)
{
//Handle exception
throw;
}
}
}

Bạn để ý nếu 3 hàm trên chỉ tung ra cùng 1 biệt lệ,mà được xử lý nhiều lần thì chắc chắn sẽ rất tốn chi phí cho ứng dụng của ta.
Và để tránh điều này ta chỉ cần sử dụng 1 khối try-catch ở trong thân hàm Main
public class NestedExceptionHandling
{
public void MainMethod()
{
try
{
ChildMethod1();
}
catch(Exception exception)
{
//Handle exception
}
}

private void ChildMethod1()
{
ChildMethod2();
}

private void ChildMethod2()
{
//some implementation
}
}

3.Không nên sử dụng vòng lặp foreach cho Collections lớn
Thông thường mình hay sử dụng vòng lặp foreach thay cho vòng lặp for,vì foreach dễ sử dụng hơn.
Tuy nhiên khi làm việc với dữ liệu lớn thì for hay foreach cái nào nhanh hơn ?.
Ta xem đoạn code dưới đây kêt hợp với thể hiện Stopwatch để đo thời gian.

static void Main(string[] args)
{
DataTable dt = PopulateData();
Stopwatch watch = new Stopwatch();
//For loop
watch.Start();
for (int count = 0; count < dt.Rows.Count; count++)
{
dt.Rows[count]["Name"] = "Value";
}
watch.Stop();
Console.WriteLine("Time For loop: {0}", watch.Elapsed.TotalSeconds);
//Foreach loop
watch.Start();
foreach (DataRow row in dt.Rows)
{
row["Name"] = "Value";
}
watch.Stop();
Console.WriteLine("Time For Each loop: {0}", watch.Elapsed.TotalSeconds);
Console.ReadKey();
}
Với đoạn code trên khi sử dụng vòng lặp foreach tốn :0.0778163s
Còn vòng lặp for tốn :0.134186s

4.Sử dụng các phương thức có sẵn
Chúng ta thường không để ý đến các phương thức có sẵn.Giả sử khi muốn kiểm tra tính hợp lệ của dữ liệu,thông thường ta sẽ viết 1 hàm để kiếm tra tính hợp lệ của dữ liệu đó.
Đoạn code mẫu dưới đây dùng để kiểm tra xem chuỗi đã cho có phải là số hay không.

public bool CheckIfNumeric(string value)
{
bool isNumeric = true;
try
{
int i = Convert.ToInt32(value);
}
catch(FormatException exception)
{
isNumeric = false;
}
return isNumeric;
}

Chúng ta có cách làm hay hơn là sử dụng phương thức sẵn có TryParse

int output = 0;
bool isNumeric = int.TryParse(value, out output);

Sử dụng TryParse sẽ làm cho đoạn code của bạn chạy nhanh hơn và sáng sủa hơn.

5.Sử dụng khai baó Using
Thông thường khi chúng ta không sử dụng đối tượng thì chúng ta sử dụng phương thức Dispose() để hủy đối tượng đó.
Đoạn code mẫu dưới đây sẻ hủy đối tượng SqlConnection khi ta không cần sủ dụng tới nó

public void MethodUsing()
{
SqlConnection connection = null;
try
{
connection = new SqlConnection("itforfun");
connection.Open();
//Do Something
}
catch (Exception exception)
{
//handle exception
}
finally
{
connection.Close();
connection.Dispose();
}
}

Dưới đây là cách sử dụng Using

public void MethodUsing()
{
using (SqlConnection connection = new SqlConnection("itforfun"))
{
connection.Open();
//Do Something
}
}

Bạn để ý khi sử dụng using thì ta không cần sử dụng khối try-catch dù có biệt lệ xảy ra, cũng không cần sử dụng phương thức Dispose() để giải phóng dữ liệu.

6.Sử dụng tên cột thay cho indexer trong DataTable
Thông thường ta thường sử dụng chỉ số cột khi muốn tương tác với DataTable.
Đoạn code dưới đây sử dụng chỉ số cột để gán dữ liệu :

public class MyClass
{
public void MyMethod()
{
// Gán dữ liệu vào DataTable
DataTable dt = DataAccess.GetData();
foreach (DataRow row in dt.Rows)
{
// Gán dữ liệu thông qua chỉ số cột.
int empId = Convert.ToInt32(row[0]);
}
}
}

Trong đoạn code trên khi bạn thay đổi thứ tự cột trong cơ sở dữ liệu thì đoạn code của bạn sẽ hiển thị không đúng với mong muốn.
Vì thế để khắc phục vấn đề trên bạn nên sử dụng tên cột

public class MyClass
{
private const string COL_EMP_ID = "itforfun";
public void MyMethod()
{
DataTable dt = DataAccess.GetData();
foreach (DataRow row in dt.Rows)
{
int empId = Convert.ToInt32(row[COL_EMP_ID]);
}
}
}

Đoạn code trên sẽ luôn hiển thị đúng theo yêu cầu của bạn dù bạn đã thay đổi thứ tự cột trong cơ sở dữ liệu.
Kết Luận:
Trên đây chỉ là một vài điều cần lưu ý trong lập trình,hi vọng bạn có thể sửa chữa được những sai lầm của mình nhờ bài viết trên.

Admin
Admin

Tổng số bài gửi : 782
Join date : 2009-08-15

View user profile http://hackis.forumotion.com

Back to top Go down

View previous topic View next topic Back to top

- Similar topics

 
Permissions in this forum:
You cannot reply to topics in this forum