peronik: MilkyCoder @MilkyCoder
Вобщем на днях хотел установить сие чудо. Мало того что инсталлер пришлось искать очень долго, так при установке выяснилось, что там не софт а хлам. Во первых что это за C++ 2005 года? Как бы на календарик надо поглядывать хотя бы иногда. MySQL 5.5 ? Мне такое на моем windows серваке не нужно, MSSQL еще куда не шло, еще MSSQL Express было бы в тему, как раз чтоб попробовать. Ну и в заключение SharePoint я себе ни за что ставить не буду. Судя даже по компонетам что вы использовали, можно судить о характере ваших высокоуровневых разработок, и что они будут жестко лагать. Такие вещи надо было разрабатывать на чистом ASP.NET MVC и только.
Oxoron Мне интересно, каким образом тогда делают тесты производительности записи блоков по случайным адресам. Они работают так же быстро как и последовательные. Например на моем SSD, в Samsung Magician, есть такой тест.
Спасибо за инфу. Честно говоря не хотел бы прибегать к таким мерам. Получается после каждого обновления записи мне придется делать новую запись в лог. При этом старая запись будет какое то время висеть в этом же файле, пока файл не перезапишется, для этого нужно будет делать специальный алгоритм. Придется держать отдельный индекс, который мапит код на смещение в этом логе. Вобщем я еще морально не готов к этому :)
public struct SYSTEM_INFO
{
internal int dwOemId;
internal int dwPageSize;
internal IntPtr lpMinimumApplicationAddress;
internal IntPtr lpMaximumApplicationAddress;
internal IntPtr dwActiveProcessorMask;
internal int dwNumberOfProcessors;
internal int dwProcessorType;
internal int dwAllocationGranularity;
internal short wProcessorLevel;
internal short wProcessorRevision;
}
>> Зачем для смены отображенного блока закрывать файл?
Я не правильно выразился, создание нового представления map.CreateViewAccessor(....) с параметрами. Думаю нет. Не проще. Дело еще не только в этом, создание и уничтожение представления имеет большие накладные расходы. Я могу дать вам функции которые я использую в продакшене для этого, если интересно:
public static MemoryMappedFile CreateMMF(this FileStream fs, string key)
{
var obj = null as MemoryMappedFile;
mayorovp: Потому что файлы большие и в память они не влезают, отсюда и частые мапинги в память, открытие и закрытие MMF имеет большие накладные расходы. Что касается глюков, то я использую указатель для работы с этой памятью, так вот где внутрях ядра нарушается учет полученных ссылок, и в какой то момент происходит эксепшн. Свой код я проверил правильно освобождаю указатели, видимо освобождение указателя происходит асинхронно, поэтому они успевают накопиться до критического уровня.
Denis Antonenko: Мне нравится ваш оптимизм :). Менять позицию блоков в файле нельзя, а random там действительно непредсказуемый т.к. зависит от действий пользователей. Размер буфера мало на что влияет. Есть же тест в топике, попробуйте сами. ) Мне видится один выход, попробовать поюзать WIN API, есть подозрения что FileStream реализован через жо, что не редкость в .Net к сожалению.
Смешно но этот пост как раз появился в результате того, что я переписываю код, что бы отказаться от отображенных в память файлов. MMF годится только тогда, когда вы один раз отрыли файл, и делает много изменений. А когда вы очень часто открываете и закрываете, все это дело работает очень медленно, и к тому же система начинает глючить.
Использование FileOptions.WriteThrough ухудшило производительность еще на два порядка. Я даже не дождался результата прошло более двух минут. Отличный ликбез по SSD. Но я же использую .net какой нафиг Trim и привязки к железу? :). FileStream все что мы можем юзать. :)
>> вычитать все данные, модифицировать, записать на диск.
Речь идет об очень больших файлах, в которые нужно записывать часто по случайным позициям.
Интересный ответ, но прочитав, я не нашел там инфы касаемо моей проблемы. Вы из личного опыта знаете, что при перезагрузке application эти задачи выполнятся гарантированно?