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


216

Ví dụ, tôi hiếm khi cần:

using System.Text;

nhưng nó luôn luôn ở đó theo mặc định. Tôi giả sử các ứng dụng sẽ sử dụng bộ nhớ nhiều hơn nếu mã của bạn chứa không cần thiết chỉ sử dụng . Nhưng có điều gì khác tôi nên nhận thức?

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


Chỉnh sửa: 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 được gọi là câu lệnh sử dụng , được thiết kế để giúp một người 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 thức IDis Dùng . Xem Công dụng "sử dụng" trong C # .

Câu trả lời:


181

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

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


@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 có trong lắp ráp được tham chiếu.
Darren Kopp

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


475

rất ít 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ỏ các mệnh đề không được sử dụng trong một dự án, có thể làm cho quá trình biên dịch nhanh hơn vì trình biên dịch có ít không gian tên hơn cho các loại tra cứu để giải quyết. (điều này đặc biệt đúng với C # 3.0 vì các phương thức mở rộng, trong đó 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ể khớp tốt hơn, suy luận kiểu chung và biểu thức lambda liên quan đến các kiểu chung)
  • có khả năng có thể giúp tránh xung đột tên trong các bản dựng trong tương lai khi các loại 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 được sử dụng.
  • sẽ giảm số lượng các mục trong danh sách hoàn thành tự động của trình soạn thảo khi mã hóa, dẫn đến việc gõ nhanh hơn (trong C # 3.0, điều này cũng có thể làm giảm danh sách các phương thức mở rộng được hiển thị)

Việc xóa các không gian tên không sử dụng sẽ không làm gì:

  • thay đổi trong 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 việc thực hiện chương trình đã biên dịch (tải nhanh hơn hoặc hiệu suất tốt hơn).

Việc lắp ráp kết quả là giống nhau với hoặc không sử dụng (các) loại bỏ sử dụng.


3
Và khi bạn sửa đổi các tệp, cuối cùng bạn sẽ 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 xóa các 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à một danh sách khổng lồ các không gian tên thay vì thực hiện thực tế.
Mert Akcakaya

5
Về việc biên dịch nhanh hơn: Các usingchỉ thị không được sử dụng trong .cscác tệp có thể ngăn bạn xóa một số tham chiếu lắp ráp (nếu không sử dụng) khỏi .csprojdự án của bạn . Nếu bạn có một "giải pháp" cho nhiều dự án, các tham chiếu không cần thiết giữa các dự án sẽ buộc các dự án được biên dịch theo một thứ tự cụ thể khi thực tế chúng độc lập và có thể được biên dịch song song. Vì vậy, loại bỏ các usingchỉ thị không sử dụng trước khi bạn kiểm tra các tham chiếu dự án không sử dụng trong một giải pháp nhiều dự án.
Jeppe Stig Nielsen

1
Đây là một lời giải thích tuyệt vời - cuối cùng nó không liên quan nhiều đến hiệu suất mà là những thực tiễn tốt nhất. Cảm ơn vì đã giải thích!
GSaunders

39

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 làm rõ và trên con đường browfield khi nhìn thấy các ứng dụng không cần thiết. Về bản chất, khi tôi thấy một số câu lệnh không được sử dụng, một lá cờ nhỏ màu vàng xuất hiện ở phía sau não tôi bảo tôi "tiến hành thận trọng". Và đọc mã sản xuất không bao giờ nên cho bạn cảm giác đó.

Vì vậy, làm sạch các ứng 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 một dev khác mà cảm giác ấm áp mờ.


Bây giờ đó là những gì tôi muốn nghe :-) Tôi đang sử dụng làm Organize Usings -> Remove and Sortmọi lúc mọi nơi. BTW, với tôi hai lựa chọn trên Organize Usingslà vô nghĩa. Tôi đang nói về VS2013 btw.
Sнаđошƒаӽ

30

Không có cấu trúc IL tương ứng với using. Do đó, các usingcâu lệnh 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 nào được tạo cho nó.

Usingchỉ được sử dụng tại thời gian biên dịch cho mục đích phân giải 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 usingcó thể có là làm chậm thời gian biên dịch một chút và chiếm 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 đó mặc dù.

Do đó, tác động tiêu cực thực sự duy nhất của việc có các usingtuyên bố bạn không cần là trên intellisense, vì danh sách các kết quả khớp tiềm năng để hoàn thành trong khi bạn nhập tăng.


4

Bạn có thể có xung đột tên nếu bạn gọi các lớp của mình 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 vấn đề nếu bạn định nghĩa một lớp có tên là "Bộ mã hóa".

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


2

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


2

Đó là sở thích cá nhân là chủ yếu. Tôi tự dọn dẹp chúng (Resharper thực hiện tốt việc nói với tôi khi không cần thiết sử dụng các câu lệnh).

Người ta có thể nói rằng nó có thể 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 ngày nay, nó sẽ không tạo ra bất kỳ tác động rõ ràng nào.


2

Để lại usingchỉ thị thêm là tốt. Có một chút giá trị 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 hội đồng biên dịch không bị ảnh hưởng bởi các usingchỉ thị bên ngoài .

Đôi khi tôi đặt chúng vào trong một #region, và để nó sụp đổ; Điều này làm cho việc xem các tập tin sạch hơn một chút. IMO, đây là một trong số ít sử dụng tốt #region.


1
Chúng có thể bị sụp đổ mà không có khu vực
abatishchev

1
@abatishchev: Vâng, điều đó đúng trong VS2010.
Jay Bazuzi

"Một trong số ít cách sử dụng tốt #region", vậy ý ​​bạn là sử dụng #regioncó tệ trong hầu hết các cách?
Steven

Vâng, #regionlà một mùi mã. Nó nói quá nhiều đang diễn ra trong lớp học của bạn.
Jay Bazuzi

2

nếu bạn muốn duy trì mã của mình sạch sẽ, các usingcâu lệnh không được sử dụng nên được xóa khỏi tệp. các lợi ích xuất hiện rất rõ ràng khi bạn làm việc trong một nhóm hợp tác cần hiểu mã của bạn, nghĩ rằng tất cả mã của bạn phải được duy trì, ít mã = ​​ít công việc hơn, lợi ích là lâu dài.


1

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

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


1

Câu lệnh sử dụng chỉ giúp bạn không đủ điều kiện loại bạn sử dụng. Cá nhân tôi thích làm sạch chúng. Thực sự nó phụ thuộc vào cách sử dụng một số liệu định vị


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ữ mã của bạn được ghi lại.

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 được sử dụng, điều này có nghĩa là không có gì, khi chạy tìm kiếm.

Bây giờ tôi đang làm sạch các không gian tên, bởi vì tôi liên tục đượ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 những 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 tách bằng các 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 một cách đơn giản hơn để làm tất cả việc này cùng một lúc.

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


0

Tuyên bố 'bằng cách sử dụng' không ảnh hưởng đến hiệu suất vì nó chỉ là một người trợ giúp trong việc xác định tên của các định danh của bạn. Vì vậy, thay vì phải gõ, System.IO.Path.Combine (...) , bạn chỉ cần gõ, Path.Combine (...) nếu bạn đã sử dụ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 được sử dụng ở nhiều nơi hoặc 1 không nên thực hiện một lần khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.