我有一个PropertiesConfiguration对象。我可以多次调用getInt(),getString()等而不关心性能吗?我的意思是,它不会每次都从文件读取或以任何其他方式降低我的系统性能?
另一种方法是在我的类初始化期间将所有值读入Map中,并将其用于查找,但如果我可以避免这种情况而不会失去性能,我显然会(更少代码等)
由于
答案 0 :(得分:1)
您必须选择并优先考虑您的要求:
如果您有少量请求并且文件本身很小,那么每次需要属性时读取文件都不是一个大问题。它还使您能够在不重新启动应用程序的情况下更改属性(有时应该这样做)。
从另一方面(我更喜欢),您必须在启动期间读取文件并将信息存储在应用程序缓存中(如HashMap等)。如果在您的应用程序中共享此缓存,您可以在任何所需的类中使用它,并且不会出现任何性能问题(但要注意并发访问,取决于您的实现)。
另外,在这种情况下,您可以提供一些额外的有效管理屏幕,用于更改属性,例如,网页,并通过一些servlet“动态”更新您的缓存(更新缓存的地图与属性+更新带有属性的文件,无需重新启动应用程序))。
如果您使用Apache Commons如下:
Configuration config = new PropertiesConfiguration("usergui.properties");
如果您查看PropertiesConfiguration的源代码,您将在下面找到。
/** stores the configuration key-value pairs */
private Map<String, Object> store = new LinkedHashMap<String, Object>();
如果您将寻找getInt()的实现,最后您将来到下面:
/**
* Read property from underlying map.
*
* @param key key to use for mapping
*
* @return object associated with the given configuration key.
*/
public Object getProperty(String key)
{
return store.get(key);
}
这是第二种情况,其中属性一次加载到地图中。我想如果你在其他类中需要“新鲜”属性,你必须再次配置它。