Для создания базы данных вам нужно будет использовать функции ввода-вывода с разбросом, предоставляемые Windows API.Это особый тип файлового ввода-вывода, который позволяет вам «разбрасывать» данные из файла в память или «собирать» данные из памяти и записывать их в непрерывную область файла.Хотя буферы, в которые разбросаны данные или из которых они собраны, не обязательно должны быть смежными, область файла источника или назначения всегда является смежной.
Эта функция состоит из двух основных функций, каждая из которых работает асинхронно.Функция ReadFileScatter
считывает непрерывные данные из файла на диске и записывает их в массив несмежных буферов памяти.Функция WriteFileGather
считывает несмежные данные из буферов памяти и записывает их в непрерывный файл на диске.Конечно, вам также понадобится структура OVERLAPPED
, которая используется обеими этими функциями.
Это именно то, что SQL Server использует, когда он читает и записывает в базу данных и/ или его файлы журналов, и фактически эта функциональность была добавлена в ранний пакет обновления для NT 4.0 специально для использования SQL Server.
Конечно, это довольно продвинутый уровень, и вряд ли для слабонервных,Удивительно, но на самом деле вы можете найти определения P / Invoke на pinvoke.net, но у меня крайне скептическое недоверие к сайту.Поскольку вам нужно потратить много времени на документирование, чтобы понять, как работают эти функции, вы также можете написать декларации самостоятельно.И выполнение этого из C # создаст целый ряд дополнительных проблем для вас, так что я даже не рекомендую это.Если для вас важен этот тип производительности ввода-вывода, я думаю, что вы используете не тот инструмент для работы.
Решение для бедняка - contig.exe , одноразовыйфайл дефрагментации доступен для бесплатной загрузки здесь .