Monotouch で Sqlite を使用している以下のコードを参照してください。これは多くのメソッドの 1 つを表し、すべての種類が同じように見えます。すべてが正常にクリーンアップされていますか? Sqlite docs で、準備されたすべてのステートメントをファイナライズする必要があることを読みましたが、一致する呼び出しが見つかりません。それで、私は何か不足していますか?
私が見る限り、私はすべてを正しく開閉して処分しています。それにもかかわらず、Sqlite からランダムにmalloc() エラーが発生しています。これは最近始まったので、コードが変更されていないため、MT 自体の Sqlite バージョンでも問題になる可能性があります。
using ( SqliteConnection oConn = this.CreateDBMSConnection() )
{
oConn.Open ();
using ( SqliteCommand oCmd = new SqliteCommand (
"SELECT CollaborationItems.*, CollaborationParticipants.intStatus AS intParticipantStatus FROM CollaborationItems " +
"LEFT JOIN CollaborationParticipants ON CollaborationItems.intItemID = CollaborationParticipants.intItemID " +
"WHERE CollaborationItems.intID = @intD", oConn ) )
{
oCmd.Parameters.AddWithValue( "@intID", iItemID );
using ( SqliteDataReader oReader = oCmd.ExecuteReader ( ) )
{
while ( oReader.Read( ) )
{
// [...] - some code omitted.
// The next call again create a DMBS connection, has similar using etc.
oItem.Participants = this.GetEventParticipants(oItem);
}
oReader.Close( );
}
}
oConn.Close( );
}
これは私が受け取る例外です:
Mono.Data.Sqlite.SqliteException: malloc() が Mono.Data.Sqlite.SQLite3.Prepare でメモリ不足に失敗しました (Mono.Data.Sqlite.SqliteConnection cnn、System.String strSql、Mono.Data.Sqlite.SqliteStatement 以前、UInt32 timeoutMS, System.String& strRemain) [0x0022a] in /Developer/MonoTouch/Source/mono/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLite3.cs:343 at Mono.Data.Sqlite. SqliteCommand.BuildNextCommand () [0x00019] in /Developer/MonoTouch/Source/mono/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteCommand.cs:230