В простом форма компилятор берет Ваш запрос кода и преобразовывает его в набор универсальных классов и вызовов. Внизу, в случае Linq2Sql, динамический SQL-запрос создается и выполнил использование DbCommand, DbDataReader и т.д.
Заявляют, что Вы имеете:
var q = from x in dc.mytable select x;
это преобразовывается в следующий код:
IQueryable<tbl_dir_office> q =
dc.mytable.Select<tbl_dir_office, tbl_dir_office>(
Expression.Lambda<Func<mytable, mytable>>(
exp = Expression.Parameter(typeof(mytable), "x"),
new ParameterExpression[] { exp }
)
);
Партии дженериков, огромных издержек.
Рассматривали ли вы memcached ?
Он распределен по сети и может быть очень быстрым.
Он имеет привязки для множества языков, вы можете получить к нему доступ из разных ОС и поддерживает несколько писателей и несколько читателей.
Общая память Ace предназначена для совместного использования на 1 платформе.
Распределенная общая память очень нетривиальна, поскольку есть проблемы, связанные с транзакционностью, которые необходимо решить. Для эффективного использования распределенной общей памяти (даже для копии) вам понадобятся (среди прочего) распределенные алгоритмы и протоколы синхронизации, которые нуждаются в отказоустойчивости в случае сбоя. (Shshooot! Не всегда так!)
По этим вопросам были написаны значительные исследовательские работы (см. Некоторые из библиографий по главам книги Таубенфилда)
Это действительно предупреждение о том, что «катание своего собственного» будет значительный проект сам по себе.
Попробуйте библиотеку ACE , в ней много хороших вещей, которые вам понравятся . У них есть класс Shared_memory , но я не уверен, что это DSM - если нет, у них есть много других сетевых / распределенных вещей, которые могут вас заинтересовать.