2010-02-23 32 views
7

Xin vui lòng bất cứ ai có thể chỉ cho tôi một hướng dẫn tốt giúp tôi làm cho mã của tôi nhanh và nhẹ. Tôi quan tâm để biết Phương pháp nào nhanh hơn và khi nào nên sử dụng một phương pháp thay vì khác ...
Và cách đánh giá xem mã có tốt hay xấu không?
Ngôn ngữ lập trình của tôi là C#.Làm thế nào để làm cho mã của tôi nhanh chóng

Xin chào tất cả,
Cảm ơn câu trả lời của bạn, chúng rất hữu ích.
Tôi đang chỉnh sửa câu hỏi của mình cụ thể hơn để tối ưu hóa không giới hạn.
Tôi muốn biết phương pháp tốt nhất trong từng điều kiện là gì.
Ví dụ bằng cách sử dụng StringBuilder là tốt hơn so với chuỗi nếu tôi đang thêm các dòng vào một chuỗi ... Tôi chỉ cần những thứ đơn giản này.

+1

Có thể bạn cần cụ thể hơn. Câu trả lời chung là: Làm nhiều như bạn có nhưng không nhiều hơn thế. –

+0

StringBuilder không đảm bảo tăng hiệu suất khi ghép các số chuỗi nhỏ (<5) - http://dotnetperls.com/stringbuilder-performance –

Trả lời

18

Hãy nhận biết của phụ tối ưu hóa.

Mặc dù một hàm cụ thể nhanh hơn một hàm thay thế này không nhất thiết sẽ tạo ra bất kỳ sự khác biệt nào trong thời gian chạy ứng dụng của bạn. Bạn cần phải hiểu những phần nào trong mã của bạn thực sự là một vấn đề tiềm ẩn và tập trung vào việc tối ưu hóa các phần này. Hãy chú ý đến các chức năng của O notation và tần suất chúng được gọi. Để xác định các bộ phận cần tối ưu hóa, một profiler có thể giúp ích rất nhiều.

This question có một số điểm thú vị về lý do bạn không nên tối ưu hóa cho đến khi thực sự cần phải làm như vậy.

+0

Liên kết câu hỏi đã bị xóa lol: ( – puretppc

2

Nếu một phương pháp luôn nhanh hơn phương pháp khác, chúng sẽ không bận tâm bao gồm cả phương thức chậm hơn.

Chỉ bất biến khi nói đến hiệu suất là bạn cần phải lập hồ sơ. Mọi thứ sau đó.

+0

Không đúng sự thật. Hãy xem xét tất cả các cách bạn có thể thực hiện tập tin i/o trong C# chẳng hạn. Các phương thức cũ treo xung quanh để tương thích ngược, và có nhiều lớp trừu tượng khác nhau tùy thuộc vào mức độ thấp hoặc mức cao mà bạn muốn đi. – RedFilter

4

Nhập REALLY nhanh.

+8

Tôi sẽ thêm: (1) loại bỏ tất cả các ý kiến ​​(2) rút ngắn các biến thành một chữ cái (3) loại bỏ khoảng trắng không cần thiết, bao gồm cả dòng mới (4) sử dụng lại các biến cho các mục đích khác nhau ... ;-) –

+2

và tôi sẽ thêm ... nếu bạn không gõ nhanh .. sử dụng phần mềm chuyển văn bản thành văn bản: P tôi không thể tưởng tượng một lập trình viên sử dụng phần mềm chuyển văn bản thành mã ... – scatman

5

Triển khai cơ bản trước, sau đó kiểm tra vị trí cần tối ưu hóa.

Nếu bạn đang sử dụng Visual Studio Profissional, bạn có thể sử dụng Analyze -> Launch Performance Wizard để phân tích hiệu suất phương thức. Tôi không chắc chắn về việc liệu các phiên bản khác có hỗ trợ tính năng này hay không, tuy nhiên, cũng có một số ứng dụng thương mại/miễn phí xung quanh ... tìm kiếm hồ sơ (xem here để biết danh sách).

1

Về lời khuyên chung:

  • Cố gắng sử dụng các vòng ít nhất cần thiết
  • Move mã ra khỏi vòng lặp nếu có thể
  • Tránh sao chép mọi thứ (như chuỗi) trong vòng
  • Tránh tạo đối tượng trong vòng
  • Bộ nhớ cache được bảo hành (thường là các đối tượng nhỏ mất nhiều thời gian để thực hiện), nhưng hãy đảm bảo bộ nhớ cache của bạn có chính sách xử lý tốt hoặc biến thành rò rỉ bộ nhớ
2

Nếu bạn nhận được bản thân một hồ sơ, nó sẽ giúp bạn cùng, một số thậm chí sẽ cung cấp cho bạn lời khuyên tuyệt vời.

Ví dụ: ANTS Profiler

Thông thường, bạn sẽ thấy rằng việc giảm số lần bạn tạo Strings được hiệu suất tăng chính bạn có thể nhận được.

Điều đó và không can thiệp vào Collector rác bằng tay (trừ khi bạn thực sự thực sự biết mình đang làm gì)

Liên kết này cho Java design patterns được cách quá tham gia, không được quá trì hoãn bởi từ Java có , bạn có thể sử dụng những gì họ dạy để phát triển bằng bất kỳ ngôn ngữ nào.

Vấn đề là, nếu bạn muốn biết khi nào nên làm gì và phương pháp nào để sử dụng và vân vân, các mẫu thiết kế là những gì bạn đang nói đến.

Tôi ước ai đó đã chỉ ra điều này với tôi trước đó trong sự nghiệp của mình.

+0

+1 cho ANTS Profiler –

3

Bạn có thể nhận được rất nhiều lời khuyên về việc này. Nhưng hãy lưu ý: Tối ưu hóa sớm là gốc rễ của mọi điều ác.

1

Bạn có thể biên dịch chương trình của mình ở chế độ gốc để cải thiện hiệu suất thời gian chạy.

0

Một trong những cách để tự tìm ra điều này là có ứng dụng bảng điều khiển nơi bạn thử chạy các đoạn mã rời rạc với nhau và định thời gian cho chúng. Giống như here.

3

Mục tiêu đầu tiên cho đúng đắn, tiếp theo cho rõ ràng và chỉ sau đó hiệu suất.

Như cũ nói đi,

"Không ai quan tâm một cách nhanh chóng như thế nào bạn có thể tính toán câu trả lời sai"

(về mặt kĩ thực tế, mặc dù sử dụng một hồ sơ)

+0

Nhưng điều đó không giúp QA tìm lỗi của bạn nhanh hơn? :) – RedFilter

7

chắc. Dưới đây là những gì chúng tôi làm:

  • Bắt đầu cuộc hành trình bằng cách quyết định khi nào hành trình kết thúc. Đặt mục tiêu hiệu suất có ý nghĩa, tập trung vào khách hàng. (Đối với cả tốc độ và tiêu thụ tài nguyên.)

  • Kiểm tra kỹ mã của bạn thường xuyên để xem bạn có đáp ứng các mục tiêu hiệu suất của mình không.

  • Nếu bạn đáp ứng các mục tiêu hiệu suất của mình, đừng lo lắng về hiệu suất. Mọi thứ đều ổn. Lo lắng về lỗi, hoặc tính chắc chắn hoặc tính năng.

  • Nếu bạn không đáp ứng các mục tiêu hiệu suất của mình, hãy chạy trình thu thập thông tin. Sử dụng nó để xác định mã vi phạm xấu nhất là gì. Nó chỉ có ý nghĩa để sửa mã tồi tệ nhất; tạo ra thứ gì đó cực kỳ nhanh và nhẹ hơn một chút và nhẹ hơn không giải quyết vấn đề hiệu suất của bạn.

  • Viết lại mã chậm để mã hoạt động hiệu quả hơn. (Đây là bit khó.) Hãy chắc chắn rằng bạn kiểm tra nó để chắc chắn rằng nó thực sự là tốt hơn.

  • Nếu bất chấp những nỗ lực tốt nhất bạn không thể làm cho nó đủ tốt, hãy đánh giá lại mục tiêu của bạn là gì hoặc hủy dự án và dành thời gian cho một thứ gì đó mà bạn có thể thành công.

Tiếp tục lặp lại cho đến khi bạn gửi thứ gì đó.

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