2008-11-14 29 views
8

Dành cho các ứng dụng web dành cho doanh nghiệp, mỗi chút tính.Mẹo hiệu suất .NET dành cho các ứng dụng web dành cho doanh nghiệp

Bạn có thể chia sẻ những mẹo hiệu suất nào để giúp chương trình lập trình hiệu quả hơn?

Để bắt đầu nó đi:

  1. Sử dụng StringBuilders qua chuỗi từ chuỗi là Mutable (họ nhận được tái tạo mỗi lần bạn thay đổi chúng).

  2. Tránh sử dụng Tập dữ liệu vì chúng rất cồng kềnh, thay vào đó hãy sử dụng SqlReader.

+0

Hai điểm bạn tạo không phải là ứng dụng web cụ thể; chúng phù hợp với bất kỳ ứng dụng .NET nào. – flesh

+1

Hoặc chúng thuộc về bất kỳ ứng dụng .NET nào - cả hai âm thanh giống như chúng làm cho mã ít đọc được, với tôi. Tôi muốn sử dụng một DataSet mạnh mẽ đánh máy (hoặc trừu tượng tương tự) hơn một SqlReader nguyên bất kỳ ngày nào trong tuần. –

+0

Tại sao F # được gắn thẻ? Ngoài ra, re # 1 - strings là IMMUTABLE, vì lý do bạn trích dẫn. –

Trả lời

0
  • Hãy sử dụng tốt của đối tượng Cache cho bất kỳ dữ liệu mà không làm thay đổi rất thường xuyên nhưng được sử dụng rất nhiều. Nếu bạn cần giữ các đối tượng bộ nhớ cache của bạn phù hợp với cơ sở dữ liệu của bạn, hãy xem SqlCacheDependency.
  • Vô hiệu hóa ViewState ở bất kỳ nơi nào không yêu cầu
+0

có, ViewState là một lớn. –

3

Chúng tôi xử lý việc này hàng ngày.

Chúng tôi lưu bộ nhớ cache một số tập dữ liệu được sử dụng A LOT. Chúng tôi có một cơ chế lưu dữ liệu lớp dữ liệu khá phức tạp hoạt động tốt cho chúng tôi.

Đánh giá lười biếng cho mọi thứ.

Trang và bộ nhớ đệm một phần cho điều khiển người dùng

Chúng tôi không sử dụng trạng thái phiên vì vậy chúng tôi đã vô hiệu hóa hoàn toàn.

Định cấu hình trang web để hoạt động với tư cách là người dùng ít được biết đến.

Kết nối với SQL Server với tư cách là người dùng có mức độ riêng tư thấp. Điều này giúp kết nối tổng hợp - tất cả các kết nối về cơ bản giống nhau.

NO ad-hoc SQL. Chỉ procs được lưu trữ. Giúp với performand và SQL injection.

String.Concat() thay vì chuỗi + chuỗi + ... hoặc StringBuilder

+0

string.concat sử dụng trình tạo chuỗi đằng sau hậu trường mà tôi đoán? Không bao giờ nghe nói về bí quyết thấp hơn 'lừa'? –

+1

Không, string.Concat không sử dụng StringBuilder. Nhưng string + string + string chỉ gọi string.Concat ... –

+0

Hãy nhớ rằng LINQ-to-SQL cũng ngăn ngừa SQL injection. Và có rất ít lợi thế khi sử dụng procs được lưu trữ trên các truy vấn tối ưu hóa, vì cả hai đều sử dụng cùng một phương pháp để lưu trữ kế hoạch thực hiện. –

1
  • cơ sở dữ liệu truy cập càng ít càng tốt
  • truy cập web.config càng ít càng tốt
  • như manwood nói làm sử dụng bộ nhớ cache tốt. Tôi cũng có thể đề nghị để đọc this bài viết rất tốt về chế độ kernel bộ nhớ đệm
  • tránh khóa nếu bạn có thể
  • một số điều (như sắp xếp dữ liệu) có thể được thực hiện nowdays phía khách hàng (xem Jquery)
  • here là bài viết tốt để đọc
24

Điểm được đưa ra trong câu hỏi là tối ưu hóa vi mô. Tôi không đồng ý với chính tiền đề rằng "mỗi chút giúp" - đặc biệt là nếu nó có chi phí dễ đọc.

Bạn thấy đấy, nếu bạn có thể đọc và hiểu mã của mình thật dễ dàng, điều đó có nghĩa là bạn có thể dễ dàng thay đổi kiến ​​trúc. Đó là nơi chiến thắng thực sự lớn, không phải là tối ưu hóa vi mô. Càng có nhiều bạn cố gắng để điều chỉnh heck ra khỏi mỗi dòng mã, khó khăn hơn nó sẽ được refactor toàn bộ thiết kế.

Vì vậy, lời khuyên của tôi là:

  • Viết mã có thể đọc được hầu hết các bạn có thể
  • Không tối ưu hóa việc thực hiện sớm - nhưng suy nghĩ về vấn đề hiệu suất kiến ​​trúc đầu
  • Đừng thực hiện thay đổi trong tên hiệu suất cho đến khi bạn có số khó để cho bạn biết liệu bạn có đang cải thiện mọi thứ hay không
  • Sử dụng profiler để giúp phát hiện tắc nghẽn

Không có điều nào cụ thể cho các ứng dụng web, cho đến nay. Đối với các ứng dụng web (và phía máy chủ nói chung):

  • Trừ khi bạn thực sự biết bạn sẽ không bao giờ cần nhiều hơn một máy chủ, hãy đảm bảo mã của bạn có thể mở rộng theo chiều ngang. Nếu bạn có thể đủ khả năng để làm như vậy, bắt đầu với hai máy chủ (hoặc nhiều hơn) để bạn có thể giải quyết mọi vấn đề (phiên, v.v.) sớm. Điều này cũng giúp nâng cấp các đoạn phim v.v.

EDIT: Tôi đã không giải quyết cơ sở dữ liệu. Kyle's answer là tốt trên mặt trận đó. Đảm bảo cơ sở dữ liệu của bạn cũng có thể mở rộng quy mô, nếu có thể :)

15

mức tăng lớn nhất bạn sẽ thấy trong (gần như) mọi ứng dụng đều điều chỉnh cơ sở dữ liệu của bạn.

Mã hóa ...

  • Bạn chọn một chục cột khi bạn chỉ cần 2?
  • Bạn có đang lấy tất cả kết quả để thực hiện SUM không?
  • Bạn có đang lấy 1.000 bản ghi để hiển thị 10 không?
  • Bạn có đang tắt hàng trăm truy vấn trên mỗi trang không?

Cơ sở dữ liệu ...

  • Bạn có chỉ số trên bảng của bạn?
  • Chúng có phải là các chỉ mục phù hợp không?
  • Bạn đã lấy một số truy vấn mẫu bằng cách sử dụng SQL Profiler và kiểm tra các kế hoạch thực hiện của chúng trong Trình phân tích truy vấn chưa?
  • Bạn có thấy TABLE SCAN - BAD không!
  • Bạn có thấy INDEX SEEK - GOOD!

Và nếu mọi thứ khác không thành công, hãy lưu phần cứng ra khỏi nó và ném thêm phần cứng vào vấn đề! :)

+0

Đừng quên: Bạn có thấy CONVERT() trên các truy vấn đối với các bảng lớn - VERY BAD !!! –

1

Ngoài cơ sở dữ liệu, một điều rất quan trọng khác cần xem ...

kích thước trang và số lượng yêu cầu. Điều này không cần phải nói, nhưng ASP.NET nổi tiếng là xấu khi điền vào các trang của bạn với một loạt các đầu ra crap (tăng kích thước) và tạo ra một triệu tệp kịch bản bên ngoài (số lượng yêu cầu).

3

Ngoại trừ gỗ đàn ông không ai đề cập đến ViewState và nó khá đáng ngạc nhiên. Tôi sẽ bầu chọn ViewState Management như là những cân nhắc quan trọng nhất để cải thiện hiệu suất.

danh sách của tôi:

  1. Manage Xem Nhà nước tích cực
  2. UpdatePanel là ác;) Hãy sử dụng Juridicious
  3. Đòn bẩy JavaScript framework như jQuery
  4. Xem máy chủ của bạn roundtrips
  5. trang Sử dụng Async cho các hoạt động liên kết IO
  6. Lưu vào bộ nhớ ở các cấp khác nhau cũng quan trọng không kém (Cấp trang, dữ liệu, v.v.)
  7. Sử dụng Ajax để tìm nạp dữ liệu "theo yêu cầu" và bộ đệm cục bộ dưới dạng XML (các đảo dữ liệu XML, v.v.)
  8. Xem xét xử lý không đồng bộ cho các hoạt động chạy dài (bạn có thể sử dụng hàng đợi công việc dựa trên cơ sở dữ liệu). dịch vụ. Một yêu cầu ajax có thể theo dõi hàng hoàn thành và cập nhật giao diện người dùng sử dụng khinh khí cầu)

Edit: [thêm 6-8]

0

kiểm tra nhật ký và giảm thiểu lượng HTML được phục vụ theo yêu cầu. các điều khiển bên thứ ba có thể làm hỏng ứng dụng của bạn. Ví dụ, chúng tôi sử dụng trong một thời gian dài lưới từ infragistics. rất có khả năng nhưng ngay cả ở dạng lột của nó, nó đã tạo ra các trang khoảng 60-90k + rất nhiều kịch bản java. điều này hạn chế nghiêm trọng số lượng yêu cầu chúng tôi có thể máy chủ, ngay cả trên kết nối gigabit nội bộ.

2

Microsoft đã xuất bản sách có tên Improving .NET Application Performance and Scalability. Đây là một cuốn sách phải đọc.

+1

Đây là từ năm 2004. Khuôn khổ .NET chắc chắn đã thay đổi rất nhiều kể từ đó. Cuốn sách vẫn được cập nhật và đáng đọc theo ý kiến ​​của bạn? Chỉ cần kiểm tra. Cảm ơn. – CesarGon

0

Theo kinh nghiệm của tôi, sau đây tạo ra một sự khác biệt lớn:

  • Sử dụng SQL Server Profiler để xác định các truy vấn chạy chậm. Đặc biệt, sử dụng mẫu điều chỉnh để xem bạn có bỏ lỡ bất kỳ chỉ mục nào không.
  • cache hợp lý (Caching khối Application)
  • Giữ một mắt trên ViewState
  • Sử dụng Fiddler để kiểm tra kích thước trang, vv
1
  • bài trở lại như hiếm khi càng tốt. Sử dụng DHTML & JavaScript để thao tác trang khi người dùng đang tạo một tập hợp các lựa chọn critera phức tạp. Không đăng lại để thực hiện các thay đổi trong một trang để đáp ứng mọi cài đặt người dùng nhỏ.
  • Sử dụng các điều khiển ASP.NET ít nhất có thể. Sử dụng html thuần túy càng nhiều càng tốt. Tất cả các điều khiển ASP.NET đều có chi phí vì trạng thái xem và trạng thái điều khiển. HTML thuần túy không có chi phí này. Tôi đã từng làm một ứng dụng web cho Citibank bao gồm một trang truy vấn chính. Trang này phức tạp vừa phải. Nó chỉ có một điều khiển ASP.NET trên đó. Đó là một nút được đăng trở lại để sản xuất một bảng Excel tùy chỉnh, được nạp với dữ liệu do người dùng chọn.
  • Sử dụng khung MVC thay vì ASP.NET. Viewstate và kiểm soát trạng thái là ra khỏi hình ảnh ở đây, nếu bạn sử dụng Brail hoặc NVelocity.
  • Chạy trình thu thập kiến ​​thức Ants bằng phần mềm Redgate trên mã back-end của bạn. Đảm bảo sự kiện postback của bạn ngắn và ngọt nhất có thể.
  • Nếu trang xuất phát dữ liệu từ một bảng được làm mới 24 giờ một lần hoặc một lần mỗi tuần, đừng viết một trang comon ASP.NET để truy vấn dữ liệu mỗi khi người dùng thực hiện yêu cầu. Nếu dữ liệu là tĩnh, làm cho trang tĩnh cũng. Bạn có thể tạo các trang tĩnh trên cơ sở lập lịch NT bằng cách sử dụng XML literals & LINQ cho các lớp XML. Đây là tốc độ lớn nhất tôi có thể cung cấp cho bạn.
0

Nếu máy chủ web của bạn đang được đập bởi số lượng lớn các yêu cầu đồng thời, và mỗi trang yêu cầu dường như mất nhiều thời gian và thời gian để dịch vụ, bạn có thể muốn xem xét việc chuyển đổi để trang không đồng bộ mô hình chế biến.

Scalable Apps with Asynchronous Programming in ASP.NET

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