多くの検索の後、SQLite.NET ページサイズをデフォルトの 4096 から変更する方法を見つけることができませんでした。SQLite.NET Async PCL Nuget (および Twincoders Extensions を使用しますが、それは関係ありません) を使用した Xamarin Forms PCL アプリがあります。 .
プラットフォーム プロジェクトでは、SQLiteConnectionString に Pagesize を設定する機能がないようです。
私の iOS コードは次のようになります。
private static SQLiteConnectionString connectionString = new SQLiteConnectionString(Path.Combine(DatabaseFilePath, DatabaseFilename), false);
private static SQLiteAsyncConnection asyncConnection = new SQLiteAsyncConnection(() => new SQLiteConnectionWithLock(new SQLitePlatformIOS(), connectionString));
public SQLiteAsyncConnection GetAsyncConnection()
{
return asyncConnection;
}
助けてください!それを行う方法がない場合は、それも知っておくとよいでしょう。
******** 編集: ********
@Paul は PRAGMA page_size の使用を提案しましたが、これは正しい考えだと確信しています。ただし、テーブルがまだ作成されておらず、ジャーナリング モードが DEFAULT であっても、SQLite.Net は page_size の変更要求を無視します。少なくともiOSでは。私のコードが間違っていない限り:
Xamarin Forms PCL には次のものがあります。
public interface ISQLite
{
SQLiteAsyncConnection GetAsyncConnection ();
}
私のiOSプロジェクトには次のものがあります:
private static string DatabaseFilename = "MyDatabase.db3";
private static string DatabaseFilePath
{
get
{
return (NSFileManager.DefaultManager.GetUrls
(NSSearchPathDirectory.LibraryDirectory,
NSSearchPathDomain.User) [0]).ToString();
}
}
private static readonly SQLiteConnectionString connectionString =
new SQLiteConnectionString(Path.Combine(DatabaseFilePath, DatabaseFilename), false);
private static readonly SQLiteAsyncConnection asyncConnection =
new SQLiteAsyncConnection(() => new SQLiteConnectionWithLock(new SQLitePlatformIOS(), connectionString));
public SQLiteAsyncConnection GetAsyncConnection()
{
var syncTask = new Task (() =>
{
//asyncConnection.ExecuteAsync("PRAGMA journal_mode=DELETE");
asyncConnection.ExecuteAsync ("PRAGMA page_size=1024"); // Has no effect on page size
});
syncTask.RunSynchronously();
return asyncConnection;
}
これはエラーなしで実行されますが、ページ サイズは変更されません。
すべてのアイデアを歓迎します!
******** さらに編集: ********
VACUUM を追加しても効果はありませんでした:
asyncConnection.ExecuteAsync ("PRAGMA page_size=1024; vacuum");