2012-02-16 1 views
3

Monotouch 5を使用してマルチスレッドメッセージングアプリケーションを開発しています。動作日数が過ぎると、一部の顧客にエラーDatabase disk image is malformedが返されます。私はインターネットで見つけたKueger SystemsのSQLite.csを使ってSQLiteデータベースにアクセスしています。MonoTouchでデータベースディスクイメージが不正です

データベースにアクセスする複数のスレッド(多くの場合)に問題があるようです。私は、データベースのコンパイル方法(シングルスレッド、マルチスレッド、シリアライズ)について、どこかで読んだことがあります。私は何とかそれを指定していますか?

データベースを壊さずにバックグラウンドスレッドから更新し続けたいと思います。私は間違って何をしていますか?

答えて

2

sqliteマルチスレッドを処理する方法を教えてください。トリックは非常にあなたのアプリケーションの初期(一度sqliteが初期化されているので、それを変更するには遅すぎるので)それを行うことです。

SQLite.csの場合、これはthisコードを使用して行うことができます。

Mono.Data.Sqlite.dllの場合は、Mono.Data.Sqlite.SqliteConnection.SetConfig (Mono.Data.Sqlite.SQLiteConfig.*);に電話して同じことをすることができます。

いずれの場合も、有効な値(config enum)はhereと記載されています。

+0

私はSQLite.csを使用していますので、FinishedLaunchingの最初の行に次の文を発行しました。Console.WriteLine(SQLite.SQLite3.Config(SQLite.SQLite3.ConfigOption.MultiThread));しかし、それは21を返します。これはどういう意味ですか?私はResult enumでそれを見つけることができません。私は早すぎるのですか? –

+0

'#define SQLITE_MISUSE 21/*ライブラリが間違って使用されています* /'私の推測は早すぎます*(早すぎると問題になるかどうかは分かりません)。あなたは 'FinishedLaunching'メソッドの始めにこれを入れましたか? – poupou

+0

はい、これはFinishedLaunchingの最初の行です。私はそれの前に何かする必要がありますか?早すぎますか? (たとえば、dbパスを最初に指定する必要があります)? –

関連する問題