Цитата 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);
}