[
https://issues.apache.org/jira/browse/IGNITE-1420?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Vladimir Ozerov resolved IGNITE-1420.
-------------------------------------
Resolution: Fixed
> .Net: Optimize metadata write.
> ------------------------------
>
> Key: IGNITE-1420
> URL: https://issues.apache.org/jira/browse/IGNITE-1420
> Project: Ignite
> Issue Type: Task
> Components: interop
> Affects Versions: 1.1.4
> Reporter: Vladimir Ozerov
> Assignee: Vladimir Ozerov
> Fix For: ignite-1.5
>
>
> Currently we perform int dictionary lookup on each field write to track
> metadata updates. This could be less than optimal because metadata updates
> are very rare.
> Several optimizations can be applied here:
> 1) For types where we use reflection we can collect all metadata information
> only once and write it when the first object of a type gets marshalled.
> Nothing more is needed.
> 2) For "marshal aware" types we never know whether new metadata is expected
> or not. We can introduce tree-like structure. When serialization start we are
> on the top of it. Then we go down as the fields are written. If we cannot
> find the node for the given field ID - we are on the new path. Then we create
> a copy of a tree and continue our path collecting updates. Finally, we flush
> them to Java and update global tree with latest changes.
> This can be highly optimized for the most common cases when there is one, at
> most two paths for the given sequence:
> - When there is only one known path, data can be stored as array. We simply
> go through it and compare current field ID with expected. So this is just
> int[].
> - When there are more paths in some places, we can have int[] + dispatch map.
> For 2-4 paths its is just a binary switch. For more paths we can fallback to
> normal dictionary.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)