1

多くの検索の後、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");
4

1 に答える 1