Thật không may đây là trường hợp rất khó để so sánh trực tiếp hiệu suất tương đối kể từ khi có bất kỳ sự xuống cấp nào xuất hiện sâu trong công cụ WPF. Trong những ngày đầu của WPF, việc sử dụng StaticResource là một trong những thay đổi điều chỉnh hiệu năng tiêu chuẩn đã được đề xuất và chúng tôi có xu hướng theo dõi nó khá nghiêm ngặt trong tổ chức của chúng tôi và giới thiệu nó cho người khác. Tôi đã thực sự khó chịu rằng Blend đã làm tất cả mọi thứ động mặc dù đã giúp nó để render tài nguyên từ các tập tin khác đúng lúc thiết kế.
Theo thời gian, quan điểm của tôi về điều này đã thay đổi, một phần do trải nghiệm cá nhân, nhưng cũng phản hồi từ những người trong nhóm Blend tại Microsoft. Như bạn có thể biết, Blend được viết hoàn toàn trong WPF và có một chủ đề thay thế hoàn toàn (Light) có thể được bật khi đang chạy trong khi ứng dụng đang chạy. Điều này là có thể bởi vì họ đã sử dụng DynamicResource cho khá nhiều kiểu dáng của họ. Theo họ, điều này đã không thực sự gây ra cho họ bất kỳ vấn đề thực sự perf. Cho rằng Blend có lẽ là ứng dụng WPF được sử dụng rộng rãi nhất trong sự tồn tại, tôi có xu hướng để cung cấp cho trọng lượng đáng kể cho quan điểm của họ.
Điều khác cần xem xét là tính hữu dụng thực tế của DynamicResource. Khả năng thay đổi kiểu dáng khi đang bay là một phần của nó, nhưng sự linh hoạt mà nó mang lại cho bạn trong việc xây dựng hệ thống phân cấp tài nguyên của bạn có thể giúp bạn quản lý các kiểu được chia sẻ dễ dàng hơn nhiều. Tôi chắc rằng bạn đã chạy vào một tình huống mà một tham chiếu StaticResource sẽ bị gián đoạn trong thời gian chạy vì tài nguyên mà nó trỏ đến sẽ được nạp vào một nhánh khác của hệ thống phân cấp.
Rõ ràng StaticResource rất hữu ích khi trỏ đến một khóa cụ thể mà bạn biết sẽ khả dụng vào đúng thời điểm. Khi viết tay XAML tôi vẫn có xu hướng sử dụng nó mọi lúc. Nhưng với năng suất bạn kiếm được từ việc một nhà thiết kế tạo ra XAML của bạn trong Blend, bất kỳ hiệu năng nhỏ nào mà bạn có thể nhận được có lẽ không đáng để làm việc với mọi thứ như Static.
Nguồn
2010-02-12 01:24:14
Về câu lệnh của bạn "Rõ ràng StaticResource rất hữu ích cho việc trỏ đến một khóa cụ thể bạn biết là sẽ có sẵn vào đúng thời điểm. " Điều này có nghĩa là một DynamicResource mất kiểm tra kiểu thời gian biên dịch và được chuyển sang thời gian chạy không? – scobi
Có. Trong hầu hết các trường hợp, tham chiếu DynamicResource không được giải quyết sẽ chỉ nhận được một giá trị mặc định (như Black for Brushes) và chờ xung quanh cho khóa mà nó đang tìm kiếm để hiển thị. Không có cách nào thực sự cho trình biên dịch xác nhận tình huống đó một mình. –
Điều đó rất hữu ích, cảm ơn !! –