2008-09-25 28 views
190

Ví dụ: tôi hiếm khi cần:Tại sao bạn nên loại bỏ C# không cần thiết bằng cách sử dụng các chỉ thị? Ví dụ:

using System.Text; 

nhưng luôn ở đó theo mặc định. Tôi cho rằng ứng dụng sẽ sử dụng nhiều bộ nhớ hơn nếu mã của bạn chứa using directives không cần thiết. Nhưng có điều gì khác mà tôi nên biết không?

Ngoài ra, nó có tạo ra bất kỳ sự khác biệt nào nếu cùng một chỉ thị sử dụng chỉ được sử dụng trong một tệp so với hầu hết/tất cả các tệp không?


Edit: Lưu ý rằng câu hỏi này không phải là về khái niệm không liên quan gọi là using statement, được thiết kế để giúp một quản lý tài nguyên bằng cách đảm bảo rằng khi một đối tượng đi ra khỏi phạm vi, phương pháp IDisposable.Dispose của nó được gọi. Xem Uses of "using" in C#.

Trả lời

163

Nó sẽ không thay đổi bất cứ điều gì khi chương trình của bạn chạy. Mọi thứ cần thiết được tải theo yêu cầu. Vì vậy, ngay cả khi bạn có câu lệnh bằng cách sử dụng, trừ khi bạn thực sự sử dụng một kiểu trong không gian tên/assembly đó, thì assembly sử dụng câu lệnh tương quan sẽ không được nạp.

Chủ yếu, nó chỉ là để làm sạch cho sở thích cá nhân.

+0

Trong đánh dấu, hãy thụt lề mã của bạn theo 4 dấu cách để nhận định dạng mã, tuy nhiên, các hộp nhận xét này không hỗ trợ đánh dấu ở tất cả mọi cách. – FlySwat

+0

@francip - đó là những gì tôi đang nói. sử dụng không ảnh hưởng đến tải lắp ráp, lắp ráp không được tải cho đến khi một loại chứa trong hội đồng được tham chiếu. –

+60

nhưng nó có thể ảnh hưởng đến thời gian biên dịch và đáp ứng Intellisense/IDE. – Marchy

2

Ứng dụng của bạn sẽ không sử dụng nhiều bộ nhớ hơn. Trình biên dịch của nó để tìm các lớp bạn sử dụng trong các tệp mã. Nó thực sự không làm tổn thương ngoài việc không được sạch sẽ.

0

Tuyên bố 'sử dụng' không ảnh hưởng đến hiệu suất vì nó chỉ là người trợ giúp trong việc xác định tên của số nhận dạng của bạn. Vì vậy, thay vì phải nhập, System.IO.Path.Combine (...), bạn có thể chỉ cần nhập, Path.Combine (...) nếu bạn có bằng System.IO.

0

Đừng quên rằng trình biên dịch thực hiện rất nhiều công việc để tối ưu hóa mọi thứ khi xây dựng dự án của bạn. Sử dụng nó được sử dụng ở rất nhiều nơi hoặc 1 không nên làm khác nhau một khi biên soạn.

2

Đó là sở thích cá nhân chủ yếu. Tôi tự làm sạch chúng (Resharper làm một công việc tốt khi nói với tôi khi có những câu nói không cần thiết).

Người ta có thể nói rằng nó có thể làm giảm thời gian để biên dịch, nhưng với tốc độ máy tính và trình biên dịch những ngày này nó sẽ không tạo ra bất kỳ tác động đáng kể nào.

1

Chúng chỉ được sử dụng làm lối tắt. Ví dụ: bạn phải viết: System.Int32 mỗi lần nếu bạn không có Hệ thống đang sử dụng; trên đầu trang.

Xóa những mục không sử dụng chỉ làm cho mã của bạn trông sạch hơn.

30

Không có cấu trúc IL tương ứng với using. Do đó, các câu lệnh using không làm tăng bộ nhớ ứng dụng của bạn, vì không có mã hoặc dữ liệu được tạo cho nó.

Using chỉ được sử dụng trong thời gian biên dịch nhằm mục đích giải quyết tên loại ngắn thành tên loại đủ điều kiện. Do đó, hiệu ứng tiêu cực duy nhất không cần thiết using có thể làm chậm thời gian biên dịch một chút và mất thêm một chút bộ nhớ trong quá trình biên dịch. Tôi sẽ không lo lắng về điều đó.

Do đó, hiệu ứng tiêu cực thực sự của việc có các câu lệnh using mà bạn không cần là trên intellisense, như danh sách các kết quả phù hợp để hoàn thành khi bạn nhập tăng.

4

Bạn có thể có các xung đột tên nếu bạn gọi các lớp của bạn giống như các lớp (không sử dụng) trong không gian tên. Trong trường hợp System.Text, bạn sẽ gặp sự cố nếu bạn định nghĩa một lớp có tên là "Encoder".

Dù sao đây thường là vấn đề nhỏ và được trình biên dịch phát hiện.

2

Để lại thêm using chỉ thị là tốt. Có một giá trị nhỏ trong việc loại bỏ chúng, nhưng không nhiều. Ví dụ: nó làm cho danh sách hoàn thành IntelliSense của tôi ngắn hơn và do đó dễ điều hướng hơn.

Các cụm được biên dịch không bị ảnh hưởng bởi các chỉ thị không liên quan using.

Thỉnh thoảng tôi đặt chúng bên trong một #region và để nó bị sập; điều này làm cho việc xem tập tin trở nên sạch hơn một chút. IMO, đây là một trong số ít sử dụng tốt của #region.

+1

Chúng có thể bị thu gọn mà không có vùng – abatishchev

+1

@abatishchev: Có, điều đó đúng trong VS2010. –

1

Tuyên bố sử dụng sẽ giúp bạn không đủ điều kiện sử dụng các loại bạn sử dụng. Cá nhân tôi muốn làm sạch chúng. Thực sự nó phụ thuộc vào cách số liệu loc được sử dụng

34

Mã sạch sẽ quan trọng.

Người ta bắt đầu có cảm giác rằng mã có thể không được duy trì và trên con đường lông mày khi người ta nhìn thấy các chi phí thừa. Về bản chất, khi tôi thấy một số câu sử dụng không sử dụng, một lá cờ màu vàng nhỏ xuất hiện ở phía sau bộ não của tôi bảo tôi phải "tiến hành thận trọng". Và việc đọc mã sản xuất sẽ không bao giờ cho bạn cảm giác đó.

Vì vậy, hãy dọn dẹp các cách sử dụng của bạn. Đừng cẩu thả. Truyền cảm hứng cho sự tự tin. Làm cho mã của bạn đẹp. Cho người khác một cảm giác ấm áp.

+0

Bây giờ đó là những gì tôi muốn nghe :-) Tôi đang sử dụng làm một 'Tổ chức Usings -> Hủy bỏ và sắp xếp' tất cả bây giờ và sau đó. BTW, với tôi hai lựa chọn trên trong 'Tổ chức Usings' là vô nghĩa. Tôi đang nói về VS2013 btw. –

420

vài lý do để loại bỏ không sử dụng sử dụng (s)/không gian tên, bên cạnh mã hóa ưu tiên:

  • loại bỏ bằng cách sử dụng các điều khoản không sử dụng trong một dự án, có thể làm cho việc soạn thảo nhanh hơn bởi vì trình biên dịch có không gian tên ít để tìm kiếm các loại để giải quyết. (điều này đặc biệt đúng đối với C# 3.0 vì các phương thức mở rộng, nơi trình biên dịch phải tìm kiếm tất cả các không gian tên cho các phương thức mở rộng để có thể so khớp tốt hơn, suy luận kiểu chung và các biểu thức lambda liên quan đến các kiểu generic)
  • có thể giúp tránh va chạm tên trong tương lai xây dựng khi các kiểu mới được thêm vào các không gian tên không được sử dụng có cùng tên với một số loại trong không gian tên đã sử dụng.
  • sẽ làm giảm số lượng các mục trong trình soạn thảo danh sách tự động hoàn tất khi mã hóa, posibly dẫn đến gõ nhanh hơn (trong C# 3.0 này cũng có thể làm giảm danh sách các phương pháp khuyến nông cho thấy)

gì loại bỏ các không gian tên không sử dụng sẽ không làm:

  • thay đổi bất kỳ cách nào đầu ra của trình biên dịch.
  • thay đổi theo bất kỳ cách nào thực hiện chương trình được biên dịch (tải nhanh hơn hoặc hiệu suất tốt hơn).

Cụm kết quả tương tự có hoặc không có sử dụng không được sử dụng.

+1

Trả lời tuyệt vời. Cảm ơn bạn đã giúp ích – nawfal

+2

Và khi bạn sửa đổi tệp, bạn sẽ kết thúc việc thêm ngày càng nhiều không gian tên vào đầu tệp. Vì vậy, nếu bạn không loại bỏ không gian tên không sử dụng, khi bạn mở tệp, tất cả những gì bạn thấy là danh sách khổng lồ các không gian tên thay vì triển khai thực tế. –

+10

+1 _This_ phải được đánh dấu là câu trả lời :) – Assimilater

1

Chỉ có các không gian tên mà bạn thực sự sử dụng cho phép bạn giữ cho tài liệu được mã hóa.

Bạn có thể dễ dàng tìm thấy những phần nào trong mã của bạn đang gọi nhau bằng bất kỳ công cụ tìm kiếm nào.

Nếu bạn có không gian tên không sử dụng, điều này có nghĩa là không có gì, khi chạy tìm kiếm.

Tôi đang làm việc để dọn dẹp không gian tên ngay bây giờ, bởi vì tôi liên tục hỏi những phần nào của ứng dụng đang truy cập cùng một dữ liệu theo cách này hay cách khác.

Tôi biết phần nào đang truy cập dữ liệu mỗi chiều do truy cập dữ liệu được phân cách bằng không gian tên, ví dụ: trực tiếp thông qua cơ sở dữ liệu và trực tiếp thông qua dịch vụ web.

Tôi không thể nghĩ ra cách đơn giản hơn để thực hiện việc này cùng một lúc.

Nếu bạn chỉ muốn mã của mình là hộp đen (đối với nhà phát triển), thì vâng, điều đó không quan trọng. Nhưng nếu bạn cần duy trì nó theo thời gian thì đó là tài liệu có giá trị giống như tất cả các mã khác.

Các vấn đề liên quan