У меня есть большой интерес к написанию системы управления базами данных. Прочитав несколько страниц о том, как был реализован SQL Server 2000, я обнаружил, что использовались страницы памяти размером 4 КБ, каждая из которых была прямой копией страницы размером 4 КБ на жестком диске. Эти страницы загружались в оперативную память по мере необходимости, а затем лениво записывались на диск, когда они простаивали (упрощение).
Находясь на стадии планирования моего проекта, мне интересно, возможен ли такой уровень контроля в коде, работающем в среде CLR. Я понимаю, что C, C++ или D, вероятно, лучше подходят для этой задачи, но я хотел бы доказать, что для себя в первую очередь. Частично мотивация этого заключается в том, что я в конечном итоге хотел бы фактически переопределить сборщик мусора CLR своим собственным, используя мою базу данных в качестве кучи, по крайней мере, для относительно устаревших объектов.
Можно ли напрямую управлять памятью из CLR? Если да, то как бы я это сделал?
Предположим сейчас, что мои данные представляют собой набор структур/классов шириной 256 байт, хранящихся в плоской таблице на диске, и я использую страницы размером 64 КБ.