Здравствуйте, vdimas, Вы писали:
V>А смысл делать FileMapping, если тебе для прочтения любого поля будет маршаллиться т.е. долго и нудно копироваться вся структура, да еще и через рефлексию?
Автоматический маршаллинг убъет нафик любой выигрыш от FileMapping.
Придумал такой вариант без маршаллинга, но в unsafe:
[StructLayout(LayoutKind.Sequential, Pack = 1)] // Pack=1 тоже жизненно необходимо, по умолчанию выравнивается вроде по 4 байта или определяется платформой
unsafe struct RateInfo
{
uint ctm;
double open;
double low;
double high;
double close;
double vol;
public fixed char copyright[64]; // ну или как там у вас...
}
//... а в соответствующей процедуре так:
byte[] buf = new byte[sizeof(RateInfo)];
GCHandle handle = GCHandle.Alloc(buf, GCHandleType.Pinned);
FileStream fs = new FileStream("infile");
fs.Read(buf, 0, buf.Length); // ну или как то иначе заполняем
RateInfo* ptr = (RateInfo*)handle.AddrOfPinnedObject().ToPointer();
//дальше поля структуры доступны через операцию ->
// а когда все закрывается и уничтожается не забыть освободить указатель
handle.Free();
Ну естественно, все это лучше обернуть в аккуратно написанный класс

И никакого маршаллинга и лишнего копирования, а тем более процедур отражения.