Ticket Hash: | 992a62361d745f9c3007deed2ed11a9858907dee | |||
Title: | mmap_size cannot be greater than 2GB even on 64 bit system | |||
Status: | Closed | Type: | Feature_Request | |
Severity: | Minor | Priority: | Medium | |
Subsystem: | Native_Assembly | Resolution: | Works_As_Designed | |
Last Modified: | 2016-03-30 04:41:35 | |||
Version Found In: | 1.0.99 | |||
User Comments: | ||||
anonymous added on 2016-02-24 13:17:17:
Setting mmap_size always gets clipped at 2 GiB even on a 64 bit system: if ( Environment.Is64BitProcess ) { cmd.CommandText = $"PRAGMA mmap_size={(long)Math.Pow(2, 36)}; PRAGMA mmap_size;"; var result = Convert.ToInt64(cmd.ExecuteScalar()); const double GiB = 1024 * 1024 * 1024; Console.WriteLine("64-bit-SQLite memory mapped page size has been set to: {0:n1} GiB", result / GiB); } Since there is nearly unlimited address space on a 64 bit system there should not be such a low limit. There are no problems (I successfully tested it) in mapping a 10 TB file into a single memory block on a system which only has 1GB (=0.001 TB) of physical RAM. mistachkin added on 2016-02-25 01:05:40: You can always recompile the SQLite interop assembly with a higher value for SQLITE_MAX_MMAP_SIZE. Currently, System.Data.SQLite uses the default value for this option, which is 0x7fff0000 (as of 3.11). |