dotnet / SqlClient

Microsoft.Data.SqlClient provides database connectivity to SQL Server for .NET applications.
MIT License
851 stars 285 forks source link

SqlBulkCopy - ReadWriteColumnValueAsync creates lot of garbage #353

Open cmeyertons opened 4 years ago

cmeyertons commented 4 years ago

ReadWriteColumnValueAsync is written generically, retrieving an object representation of the row's value and passing around object between the read & write. Usually this is a value type that gets boxed, creating GC pressure.

Describe the solution you'd like

I would like ReadWriteColumnValueAsync to leverage generics and the full IDataReader interface to avoid boxing unless absolutely necessary.

This read value portion should also respect IDataReader.GetFieldType and its underlying value getters (GetDecimal, etc.)

cheenamalhotra commented 4 years ago

Hi @cmeyertons

If you'd like to contribute a PR to improve memory management in this API, feel free to do to so. That way it can be reviewed faster and you can get this improvement merged in driver sooner. We'll definitely consider otherwise but it may not stand up in priority list.

cmeyertons commented 4 years ago

Awesome, already have a fork and some work going. Will keep you posted

cmeyertons commented 4 years ago

@cheenamalhotra would it be possible to move this one out of Waiting for Customer?

I have had a PR open for a while with outstanding questions. Thank you!

cheenamalhotra commented 4 years ago

Could you also update your PR to dotnet/master and resolve conflicts?

benrr101 commented 7 months ago

Updating to link to the more recent PR #1048