Jannick Bitsch created AVRO-3893:
------------------------------------
Summary: Significant allocations from unnecessary lambda capture
on deserialization path
Key: AVRO-3893
URL: https://issues.apache.org/jira/browse/AVRO-3893
Project: Apache Avro
Issue Type: Improvement
Components: csharp
Reporter: Jannick Bitsch
During investigation of a GC issue of a C# project we discovered that ~10%
could be attributed to an unnecessary lambda capture on a hot-path of Avro
deserialization while utilizing a PreresolvingDatumReader.
The capture happens in ObjectCreator.FindType where, instead of using the 'key'
parameter passed to the value function, the lambda captures the 'name' method
parameter:
{code:java}
private Type FindType(string name)
{
return typeCacheByName.GetOrAdd(name, (_) =>
{
Type type = null;
if (TryGetIListItemTypeName(name, out var itemTypeName))
{
return GenericIListType.MakeGenericType(FindType(itemTypeName));
}
if (TryGetNullableItemTypeName(name, out itemTypeName))
{
return GenericNullableType.MakeGenericType(FindType(itemTypeName));
}
....
{code}
It should be a simple improvement to use the value passed to the Func<string,
Type> instead. Will open a PR.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)