Author: michiel
Date: 2009-06-30 11:57:16 +0200 (Tue, 30 Jun 2009)
New Revision: 36499
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ResultBuilder.java
Log:
this code is cloning very many DataTypes, while most of the time it's the same
one. Added a simple cache, to void a whole lot of those
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ResultBuilder.java
===================================================================
---
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ResultBuilder.java
2009-06-30 09:35:51 UTC (rev 36498)
+++
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ResultBuilder.java
2009-06-30 09:57:16 UTC (rev 36499)
@@ -14,7 +14,9 @@
import org.mmbase.bridge.Field;
import org.mmbase.cache.AggregatedResultCache;
+import org.mmbase.cache.Cache;
import org.mmbase.module.core.*;
+import org.mmbase.core.CoreField;
import org.mmbase.storage.StorageException;
/**
@@ -31,7 +33,17 @@
public class ResultBuilder extends VirtualBuilder {
private final SearchQuery query;
+ protected static final Cache<String, CoreField> fieldCache = new
Cache<String, CoreField>(200) {
+ @Override
+ public String getName() {
+ return "ResultFieldCache";
+ }
+ };
+ static {
+ fieldCache.putCache();
+ }
+
/**
* Creator.
* Creates new <code>ResultBuilder</code> instance, used to represent
@@ -50,7 +62,13 @@
if (fieldAlias == null) {
fieldAlias = field.getFieldName();
}
- fields.put(fieldAlias,
org.mmbase.core.util.Fields.createField(fieldAlias, field.getType(), -1,
Field.STATE_VIRTUAL, null));
+ String key = fieldAlias + "-" + field.getType();
+ CoreField coreField = fieldCache.get(key);
+ if (coreField == null) {
+ coreField =
org.mmbase.core.util.Fields.createField(fieldAlias, field.getType(), -1,
Field.STATE_VIRTUAL, null);
+ fieldCache.put(key, coreField);
+ }
+ fields.put(fieldAlias, coreField);
}
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs