You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by "Joshua Graham (JIRA)" <ji...@apache.org> on 2006/06/24 15:23:29 UTC
[jira] Created: (CHAIN-32) Improve instantiation performance of
ContextBase subclasses
Improve instantiation performance of ContextBase subclasses
-----------------------------------------------------------
Key: CHAIN-32
URL: http://issues.apache.org/jira/browse/CHAIN-32
Project: Commons Chain
Type: Improvement
Versions: 1.0 Release
Environment: Any
Reporter: Joshua Graham
Priority: Trivial
Noted that iteration through pd[] array thrice: twice to eliminate() the "empty" and "class" entries, and lastly to add each remaining entry to the descriptors map. The first two iterations each include costly array copies.
Guessed that two if name.equals checks in the third iteration would tend to be much quicker (especially for Beans with many properties). Did some quick performance checks to verify that this is the case - it's enough of a change to warrant a small refactor.
Here's a revised initialize(). You can thus remove the eliminate() method...
// Retrieve the set of property descriptors for this Context class
try {
pd = Introspector.getBeanInfo
(getClass()).getPropertyDescriptors();
} catch (IntrospectionException e) {
pd = new PropertyDescriptor[0]; // Should never happen
}
// Initialize the underlying Map contents
if (pd.length > 0) {
descriptors = new HashMap();
for (int i = 0; i < pd.length; i++) {
String name = pd[i].getName();
if ("class".equals(name) || "empty".equals(name)) {
// skip getClass() and isEmpty();
}
else {
descriptors.put(name, pd[i]);
super.put(name, singleton);
}
}
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org
[jira] Resolved: (CHAIN-32) Improve instantiation performance of
ContextBase subclasses
Posted by "Niall Pemberton (JIRA)" <ji...@apache.org>.
[ http://issues.apache.org/jira/browse/CHAIN-32?page=all ]
Niall Pemberton resolved CHAIN-32:
----------------------------------
Fix Version: 1.2
Resolution: Fixed
Assign To: Niall Pemberton
Thanks for the patch - I applied a slight variation on what you suggested since removing the calls to the "eliminate" method means that there will always be a pd array of at least 2 and your implementation resulted in unnecessarily creating an empty Map when there were no properties.
> Improve instantiation performance of ContextBase subclasses
> -----------------------------------------------------------
>
> Key: CHAIN-32
> URL: http://issues.apache.org/jira/browse/CHAIN-32
> Project: Commons Chain
> Type: Improvement
> Versions: 1.0 Release
> Environment: Any
> Reporter: Joshua Graham
> Assignee: Niall Pemberton
> Priority: Trivial
> Fix For: 1.2
>
> Noted that iteration through pd[] array thrice: twice to eliminate() the "empty" and "class" entries, and lastly to add each remaining entry to the descriptors map. The first two iterations each include costly array copies.
> Guessed that two if name.equals checks in the third iteration would tend to be much quicker (especially for Beans with many properties). Did some quick performance checks to verify that this is the case - it's enough of a change to warrant a small refactor.
> Here's a revised initialize(). You can thus remove the eliminate() method...
> // Retrieve the set of property descriptors for this Context class
> try {
> pd = Introspector.getBeanInfo
> (getClass()).getPropertyDescriptors();
> } catch (IntrospectionException e) {
> pd = new PropertyDescriptor[0]; // Should never happen
> }
> // Initialize the underlying Map contents
> if (pd.length > 0) {
> descriptors = new HashMap();
> for (int i = 0; i < pd.length; i++) {
> String name = pd[i].getName();
> if ("class".equals(name) || "empty".equals(name)) {
> // skip getClass() and isEmpty();
> }
> else {
> descriptors.put(name, pd[i]);
> super.put(name, singleton);
> }
> }
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org