Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: MemoryMappedFile & ReadFile
Показать сообщение отдельно

Пользователь


Сообщения: 107
Благодарности: 9

Профиль | Цитировать


Цитата lxa85:
До вызова процедуры, во время вызова процедуры, во время выполнения процедуры? »
До. То, что внутри () после using, выполняется до его тела. Собственно CreateFileMapping как раз и отображает ( =копирует) в озу часть (или весь, у меня часть) файла с другого носителя.

Цитата lxa85:
Поставить пальцем точку в листинге программы и сказать, что "От сих мы работаем только с ОЗУ". »
Цитата Sidewalker:
using (var mmf1 = MemoryMappedFile.CreateFromFile(@"C:\Users\xxx\Documents\Visual Studio 2010\Projects\sizetests1\sizetests1\bin\Debug\Test.data", FileMode.Open, "file1"))
{ »
ОТ СИХ. И до закрытия фигурной скобки using'а.

Цитата lxa85:
На предзащите гораздо интереснее смотреть толковый график, нежели всматриваться в микро(очень маленькую? )статистику с колонками цифр. »
Это не диплом, у нас у курсовых нет предзащит) Потом мб ещё другими объемами поиграюсь, а так хватит. Тем более для отображения ( = мэппинга) в ОЗУ требуется непрерывный(!) свободный кусок. А большого обычно такового нет.

В общем. Проблема решилась. Дело было в том, что при таком
Цитата Sidewalker:
accessor1.ReadArray<int>(0, Sc2.mas2, 0, 5242880); // 20 mb »
способе из озу считывается и копируется в массив поэлементно (ОБЕ операции), т.е. считалось 4 байта, скопировалось ( =записалось в озу в массив) в элемент, и потом так же для следующего. Всё бы ничего, НО ReadFile читает СРАЗУ весь блок с харда, а потом просто копирует его в массив. Соответственно это выполняется примерно с такой же скоростью как и в случае mapping'а, порой и быстрее. Т.к. отказываться от такой удобной обертки как MemoryMappedFile не хотелось и суперпроизводительность не была целью, решил исправить проблему путем считывания ReadFile по 4 байта в цикле.


Код: Выделить весь код
for (i = 0; i < length_1; i++)
                        {
                            ReadFile(fs1.Handle, pointerForArray+i, 4, ref plen_1, IntPtr.Zero);
                        }

Последний раз редактировалось Sidewalker, 18-07-2020 в 17:04.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:29, 19-11-2011 | #7

Название темы: MemoryMappedFile & ReadFile