| Summary: | Improve performance of CDOTransactionImpl.getID(InternalCDOObject, boolean) | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | [Modeling] EMF | Reporter: | Victor Roldan Betancort <vroldanbet> | ||||||||
| Component: | cdo.core | Assignee: | Victor Roldan Betancort <vroldanbet> | ||||||||
| Status: | CLOSED FIXED | QA Contact: | Eike Stepper <stepper> | ||||||||
| Severity: | enhancement | ||||||||||
| Priority: | P3 | CC: | andy.rytina | ||||||||
| Version: | 4.1 | Flags: | stepper:
review+
|
||||||||
| Target Milestone: | --- | ||||||||||
| Hardware: | PC | ||||||||||
| OS: | Windows 7 | ||||||||||
| Whiteboard: | Lighter, Faster and Better | ||||||||||
| Attachments: |
|
||||||||||
Changing the snippet to:
CDORevisionKey revKey = cleanRevisions.get(object);
if (revKey != null && getDetachedObjects().containsValue(object))
{
id = revKey.getID();
}
dramatically improves performance (our tests indicates 67% improvement: execution time went down from 874 seconds to 286 seconds).
All test-cases pass.
Created attachment 208434 [details]
patch v1
Proposed change
I can't apply ;-( Stepper@SOLIDSTATE ~/cdo (master) $ git apply c:/develop/patches/bug_366803_v1.patch fatal: corrupt patch at line 21 Created attachment 208448 [details]
patch v2
Eike please try with this one.
Comment on attachment 208448 [details]
patch v2
Still wrong patch format.
Created attachment 208450 [details]
patch v3
ok, now command line!
Port to 4.0 via bug 366840. Pushed to Master, commit b4d439314c266fc1c2c137d563f136728067fd8d Pushed to Master, commit b4d439314c266fc1c2c137d563f136728067fd8d Available in R20130213-0014 (4.1.2) |
Recent profiling sessions in one of our applications reveal a big performance bottleneck in org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.getID(InternalCDOObject, boolean), and more specifically in the following code snippet: if (getDetachedObjects().containsValue(object)) { CDORevisionKey revKey = cleanRevisions.get(object); if (revKey != null) { id = revKey.getID(); } } This bottleneck appears with big commits with lots of changes, where getDetachedObjects() returns a big collection. Any enhacement should be backported to 4.0 too, as long as its technically possible.