2009-12-01 6 views
18

Tôi đang sử dụng ResourceBundle và Locale để tra cứu các giá trị thuộc tính. Rất đơn giản, mã trông giống như sau:Hiệu suất của Java ResourceBundle

public static String getPropertyValue(Locale locale, String resourceName, String key) { 
    ResourceBundle resource = ResourceBundle.getBundle(resourceName, locale); 
    return resource.getString(key); 
    } 

Câu hỏi của tôi là về hiệu suất. Một cách tiếp cận bộ nhớ đệm có thể thực hiện nhanh hơn hoặc tốt hơn việc truy cập các tệp thuộc tính trên classpath không? Sự hiểu biết của tôi là hiệu suất ResourceBundle là rất tốt nói chung.

Tệp thuộc tính (trong trường hợp này) nhỏ hơn 30 dòng (nghĩa là ~ 30 cặp khóa/giá trị).

Tôi đặt câu hỏi về hiệu suất vì chúng tôi có thể sử dụng phương pháp tương tự trên các trang có tải cao và phương pháp tra cứu theo yêu cầu có thể chứng minh tốn kém.

+0

Đừng đoán, đo lường. Điểm chuẩn này không quá khó, và nó loại bỏ sự không chắc chắn. – skaffman

+0

Tốt hơn là nên đo * và * hiểu. Một tiêu chuẩn tốt không phải là một đảm bảo cho hiệu suất tốt trong mọi tình huống, nó luôn luôn tốt hơn để hiểu những gì đang xảy ra dưới mui xe. –

Trả lời

22

Theo Javadocs:

Resource bó trường tạo ra bởi các getBundle phương pháp nhà máy được lưu trữ theo mặc định, và các phương pháp nhà máy trả lại cùng một tài nguyên bó dụ nhiều lần nếu nó đã được lưu trữ.

Vì vậy, bạn không cần phải tự lưu bộ nhớ cache. Nhưng nếu bạn cần kiểm soát chi tiết hơn về hành vi lưu vào bộ nhớ cache, bạn có thể sử dụng quá tải getBundle(String, ResourceBundle.Control) và vượt qua một tùy chỉnh Control trong.

+0

Ack, không biết làm thế nào tôi bỏ lỡ điều đó. Cảm ơn, mm. – Chocula