2013-02-09 46 views
9

Tôi đã cố gắng tối ưu hóa chức năng mã hóa JavaScript (trong C#) để cải thiện hiệu suất của nó (trong nỗ lực tổng thể cải thiện hiệu suất của ứng dụng web doanh nghiệp) . Chúng tôi đã cố gắng sử dụng .NET HttpUtility.JavaScriptStringEncode nhưng nó không mã hóa cách lớp dữ liệu của chúng tôi dự đoán (và thay đổi lớp dữ liệu không nằm trên bảng).Hiệu suất khác biệt giữa phương pháp .NET (trong .dll) và phiên bản phản chiếu

Sử dụng công cụ trình tạo hồ sơ RedGate Tôi đã xác định hiệu suất tốt nhất của chức năng của chúng tôi là khoảng 8% tổng tải trang. Khi tôi sử dụng hàm .NET (trên một trang chấp nhận nó), nó chiếm khoảng 0,08% tổng tải trang. Chúng tôi đã phản ánh chức năng .NET để xem ma thuật mà họ đang làm việc và khi tôi sao chép mã phản chiếu vào hàm và chạy nó trực tiếp, nó thực hiện khoảng 10%.

Tôi tò mò là tại sao. Chức năng .NET được chuẩn bị khác nhau như thế nào để đạt được hiệu suất tăng như vậy?

Tôi xin lỗi trước nhưng tôi không thể dán chức năng mà chúng tôi đang sử dụng, nhưng tôi không nghĩ điều đó sẽ ảnh hưởng đến việc trả lời câu hỏi.

+1

Thú vị. Chỉ cần đảm bảo, nhưng bạn đã chạy các điểm chuẩn này trong Chế độ phát hành trên cùng một máy tính và trang, phải không? Oh, và bạn đã chạy thử nghiệm nhiều lần trong cùng một hoạt động để đảm bảo JIT đã tạo ra tất cả mã trước khi bạn đánh giá nó? – Cameron

+1

Thay đổi thời gian chạy thực tế hay chỉ là phần tải trang tổng thể? Có lẽ trang là phức tạp hơn và tổng số là chậm hơn. –

+0

Tôi sẽ thử sử dụng bộ nối tiếp ServiceStack (có sẵn qua NuGet); nó nhanh nhưng vẫn linh hoạt hợp lý. Đối với các phép đo hiệu suất, hãy thử cách ly mã thành thử nghiệm đơn vị hoặc tương tự, để bạn có thể lặp lại lặp lại và dễ dàng so sánh các phương pháp khác nhau. Mã điểm chuẩn chạy qua IIS thường không lý tưởng vì nhiều yếu tố khác có thể làm lệch kết quả. Lưu ý rằng vận chuyển dll với .NET thường được biên dịch trước và do đó không cần phải được JIT'ed khi chạy. –

Trả lời

1

Bạn có thể so sánh mã IL được tạo sau khi dán mã phản chiếu vào thư viện của mình với mã IL có trong thư viện .NET không? Việc chuyển đổi trình biên dịch đang được sử dụng để biên dịch có thể gây ra sự khác biệt như vậy.