Nếu sau khi bạn nâng cấp lên Windows 10 hoặc .NET Framework 4.7.1 và bạn nhận thấy hiệu suất giảm đáng kể khi bạn chạy các ứng dụng .NET Framework sử dụng System.Diagnostics.StackFrame lớp học, thì bài đăng này có thể bạn quan tâm. Chúng tôi sẽ xem xét nguyên nhân và sau đó đưa ra các bản sửa lỗi đã biết cho lỗi.
Hiệu suất của System.Diagnostics.StackFrame giảm sút
Ứng dụng có hiệu suất chấp nhận được chạy trên .NET Framework 4.7 hoặc các phiên bản cũ hơn thực thi chậm hơn khi chạy trên .NET Framework 4.7.1. Các ứng dụng thường dựa vào StackFrame khi chúng đưa ra các ngoại lệ .NET. Nếu điều này xảy ra với tốc độ cao (hơn 10 sự cố mỗi giây), các ứng dụng có thể chậm lại đáng kể (gấp mười lần) và chạy chậm hơn đáng kể so với trước đây.
Nguyên nhân do hiệu suất của System.Diagnostics.StackFrame giảm sút
.NET Framework 4.7.1 trong Windows 10 đã bổ sung hỗ trợ để phát hiện và phân tích cú pháp định dạng tệp Portable PDB để hiển thị thông tin tệp và số dòng trong dấu vết ngăn xếp. Là một phần của thay đổi này, mỗi chức năng trong một dấu vết ngăn xếp được kiểm tra mô-đun xác định của nó để xác định xem mô-đun đó có sử dụng định dạng Portable PDB hay không. Do một số khác biệt trong chính sách bộ nhớ đệm nội bộ, thời gian chạy dành nhiều thời gian hơn để tìm kiếm các PDB di động hơn so với các phiên bản .NET Framework trước đó dành cho việc tìm kiếm các PDB cổ điển của Windows.
Điều này khiến dấu vết ngăn xếp được định dạng được tạo chậm hơn trước.
Vấn đề này không thay đổi số lượng ngoại lệ được ném ra. Tuy nhiên, nó làm giảm đáng kể khả năng của các ứng dụng để xử lý các ngoại lệ đó.
Các ứng dụng sử dụng thư viện IKVM được biết là sẽ bị ảnh hưởng bởi sự cố này nếu chúng thăm dò các tập hợp. Việc dò tìm các tập hợp được biết là nguyên nhân gây ra các ngoại lệ.
Khắc phục sự cố làm giảm hiệu suất của System.Diagnostics.StackFrame
Để giải quyết vấn đề này, Microsoft khuyên bạn nên sử dụng một trong các phương pháp sau.
1] Sử dụng một hàm tạo khác cho StackFrame nhận đối số Boolean
Đây là giải pháp ưu tiên.
Nếu nhà phát triển ứng dụng có thể thực hiện thay đổi đối với ứng dụng của họ, hãy gọi hàm tạo System.Diagnostics.StackTrace. # Ctor (Boolean) bằng cách sử dụng đối số sai để tránh thu thập thông tin nguồn. Điều này tránh phần mã trong đó hiệu suất bị giảm.
2] Khôi phục hoặc nâng cấp lên phiên bản Windows 10 mới nhất
Trong phương pháp này, hãy quay lại phiên bản / bản dựng trước đó hoặc nâng cấp lên phiên bản / bản dựng mới nhất của Windows 10 nếu bạn đang gặp sự cố này và hiện bạn không chạy phiên bản mới nhất của Windows 10. Đồng thời gỡ cài đặt .NET Framework 4.7 .1 nếu có, từ máy tính của bạn, sau đó tải xuống và cài đặt phiên bản trước đó hoặc phiên bản .NET Framework mới nhất.
Hy vọng điều này sẽ hữu ích!