10 SeattleのdbExpressでTWideStringFieldを持つテーブルを開くと、メモリリークが発生する
問題
TSQLConnectionのParamsプロパティで、ServerCharSet=UTF8を設定し、データベースへ接続すると、参照しているテーブルのVARCHAR等の文字列型のカラムは、Delphi/C++Builderでは、TWideStringFieldへマッピングされます。
そしてTWideStringFieldのカラムを持つテーブルを開き、アプリケーションを終了すると、以下の図のようにFastMMによってメモリリークが検出されます。
解決
本件は、適切な条件でメモリを解放していないdbExpressの不具合であり、10.1 Berlinで修正済みです。
なお、10 Seattleで本件を解決するためには、Data.DBXPlatformユニット内のTDBXPlatform.FreeAndNilWideStringBuilderメソッドを以下のように修正してください。
(修正前)
(修正後)
今回修正が必要なユニットファイルは、Data.DBXPlatform.pasのみですが、
Data.DBXPlatformがData.SqlExpr、Data.DBXDBReaders、Data.DBXCommonのユニットに依存しているため
- Data.SqlExpr.pas
- Data.DBXDBReaders.pas
- Data.DBXCommon.pas
も併せて自身のプロジェクトへコピーし、一緒にビルドする必要があります。