2009-12-17 49 views

Trả lời

44

Bạn nên tránh lo lắng về tác động hiệu suất của các tính năng ngôn ngữ cụ thể trừ khi bạn có bằng chứng cụ thể (số đo) rằng chúng thực sự gây ra sự cố.

Mối quan tâm chính của bạn phải là tính chính xác của mã và tính bảo trì của mã. Tuy nhiên, việc đúc không cần thiết thường có thể tránh được trong C# bằng cách áp dụng các thực hành lập trình OO tốt và sử dụng Generics (đặc biệt là các bộ sưu tập) một cách thích hợp. Trong những trường hợp bạn cần phải thực hiện truyền, rất khó có thể là nút cổ chai hiệu suất trừ khi bạn đang thực hiện nó trong một vòng lặp chặt chẽ hoặc với các loại có khả năng ném một ngoại lệ truyền không hợp lệ.

Hầu hết các vấn đề về hiệu suất thế giới thực xuất hiện từ các lựa chọn thuật toán hoặc thiếu nhận thức về chính nền tảng - không phải từ các tính năng ngôn ngữ cụ thể.

+50

Có lẽ bạn có thể thêm một điều nhỏ vào cuối về __the phí của loại casting__. Thật tốt khi có lời khuyên, nhưng nó không trả lời câu hỏi. –

+0

Câu trả lời hay cho câu hỏi khác. – Acidic

18

Không, nó không được tránh bằng mọi giá. Đúc không đắt lắm. Tất nhiên, nếu bạn có một vòng lặp chạy hàng triệu lần một giây thì có thể có ý nghĩa để tránh truyền để lưu một số hiệu suất, nếu không nó sẽ không thực sự gây ra các vấn đề về hiệu năng.

Vấn đề thực sự khi truyền là an toàn loại gian lận. Nếu bạn không cẩn thận, nó không quá khó để giới thiệu lỗi hoặc làm giảm khả năng đọc của mã nếu bạn bỏ mọi thứ khắp nơi.

4

Nếu bạn có thể sử dụng Generics thì nó là một giải pháp tốt hơn so với đúc. Boxing và unboxing là một hoạt động đắt tiền cần tránh nếu có thể. Vấn đề là đôi khi nó không thể tránh được.

Ngoài ra câu trả lời khác ở đây đề cập rằng lo lắng về điều gì đó như quyền anh là rất tầm thường so với mối quan tâm hiệu suất cụ thể hoặc khả năng bảo trì mã. Tôi hoàn toàn đồng ý với điều đó.

+1

Tôi không nghĩ rằng boxing áp dụng ở đây bởi vì OP đang hỏi về việc đưa vật thể vào đối tượng, chứ không phải giá trị đối tượng. –

2

Nói chung, chi phí đúc một đối tượng trên cơ sở adhoc thấp ở quy mô lớn của sự vật. Tuy nhiên, nếu bạn liên tục đúc các đối tượng nhiều lần thì đó là khi bạn nên cố gắng tránh nó nếu bạn thấy nó là nguyên nhân của một vấn đề hiệu suất.

Sau khi tất cả, một trong những cải tiến chính từ NET 1,1-2,0 là sự ra đời của Generics - điều này giải quyết vấn đề của mạnh mẽ gõ danh sách các đối tượng (ví dụ ArrayList = dựa trên đối tượng, Danh sách = gõ list)

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