Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852

Считывание данных из ОЗУ (MemoryMappedFile)

07.06.2014, 15:04. Показов 4203. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне необходимо считать текстовый файл размером в 300мб, посоветовали воспользоваться Memory Mapped File. С записыванием данных в ОЗУ у меня не было проблем:
C#
1
2
string path_lib = textBox_lib.Text;
var file = MemoryMappedFile.CreateFromFile(path_lib, FileMode.Open, "Lib");
А вот считывать я не умею. Как я понял, все уже находится в массиве, главное правильно к нему обратиться. Подскажите как это сделать?

Добавлено через 56 минут
Нашел, что еще необходимо добавить и как вариант проверил вывод:
C#
1
2
3
4
5
 using (MemoryMappedViewStream stream = file.CreateViewStream())
                    {
                       BinaryReader reader = new BinaryReader(stream);
                        MessageBox.Show((string)reader.ReadString());
                    }
Он мне вывел только 2 и 3 строку, не полностью
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.06.2014, 15:04
Ответы с готовыми решениями:

Перессылка массива данных из одного места ОЗУ в другое место ОЗУ
Есть ли какой-нибудь примерчик программки, которая выполняет пересылку массива данных размерностью 15 из одной области ОЗУ в другую.

MemoryMappedFile и AIMP
У AIMP'a есть файл проекции в котором содержится вся информация о проигрываемом файле. В делфи я мог так procedure THiAsmClass.doGet; ...

Не ясно с MemoryMappedFile
Здравствуйте, есть такой код: using System; using System.Collections.Generic; using System.IO; using...

16
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.06.2014, 15:27
kingzfate, да считывай просто как обычный файл. 300 мб - это не катастрофа. В крайнем случае у людей, у которых 512 метров памяти, будет задействована подкачка. Париться надо при чтении файлов 1гб+
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
07.06.2014, 15:32  [ТС]
Psilon, Проблема в том, что у меня программа вырубается когда я пытаюсь считать такой большой файл. Считываю так:
C#
1
2
3
4
5
6
   using (StreamReader sr = new StreamReader(path, false))
                    {
                        string ss = sr.ReadToEnd();
                        if (ss != null)
                            richTextBox1.Text = ss;
                    }
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.06.2014, 18:26
kingzfate,
C#
1
richTextBox1.Text = File.ReadAllText(path);
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
07.06.2014, 18:55  [ТС]
Psilon, выбивает ошибку о нехватки памяти.
Необработанное исключение типа "System.OutOfMemoryException" в mscorlib.dll
Может как то в другой поток? Или увеличить память
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.06.2014, 19:47
kingzfate, 300 мб не может выбивать память. Выбить может если файл 2+ гигов.
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
07.06.2014, 20:08  [ТС]
Psilon, Вот скрины, выше вроде как все правильно делаю, да и не должно затрагиваться при открытии этого файла
Миниатюры
Считывание данных из ОЗУ (MemoryMappedFile)   Считывание данных из ОЗУ (MemoryMappedFile)  
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.06.2014, 20:25
kingzfate, а попробуйте string s = File.ReadAllText сначала.

Добавлено через 7 минут
kingzfate, вот простой код, который позволяет определить максимально возможный объем файла в мегабайтах:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    class Program
    {
        static void Main(string[] args)
        {
            double dichotomy = Dichotomy(d =>
                                         {
                                             try
                                             {
                                                 int size = (int) d;
                                                 byte[] b = new byte[size];
                                                 return -b.Length;
                                             }
                                             catch (Exception)
                                             {
                                                 return 0;
                                             }
                                         }, 0, int.MaxValue, 1);
            Console.WriteLine("{0:f}MB", dichotomy/1024/1024);
            Console.ReadKey();
        }
 
        private static double Dichotomy(Func<double, double> func, double a, double b, double epsilon)
        {
            double delta = epsilon / 10;
            while (b - a >= epsilon)
            {
                double middle = (a + b) / 2;
                double lambda = middle - delta, mu = middle + delta;
                if (func(lambda) < func(mu))
                    b = mu;
                else
                    a = lambda;
            }
            return (a + b) / 2;
        }
    }
Добавлено через 1 минуту
вот еще пример, строка размером 500мб создается спокойно
Миниатюры
Считывание данных из ОЗУ (MemoryMappedFile)  
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
07.06.2014, 20:49  [ТС]
Psilon, string s = File.ReadAllText работает, как только пытаюсь записать в RichTextBox то вылетает, может в этом проблема?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.06.2014, 20:52
kingzfate, ну а вы что хотели. Память не резиновая, то есть память-то как раз резиновая, а вот отобразить - проблема. попробуйте свой файл в блокноте открыть - он вас нафиг пошлет, сказав, что файл слишком большой.
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
07.06.2014, 22:07  [ТС]
Psilon, как ни странно, в блокноте и в нотепаде все открывается) видимо там по другому химичить надо... т.е. string s = File.ReadAllText записывает в "s" весь текст, я правильно понимаю? И потом можно работать с эим стрингом?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.06.2014, 22:24
kingzfate, а ну да, это notepad++ говорит, что файл слишком большой, а блокнот просто виснет

Цитата Сообщение от kingzfate Посмотреть сообщение
И потом можно работать с эим стрингом?
конечно нельзя - по рукам атата
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
07.06.2014, 22:26  [ТС]
Psilon, Вот, открылось в блокноте.. но суть даже не в этом, как мне все таки работать с этим файлом?
Миниатюры
Считывание данных из ОЗУ (MemoryMappedFile)  
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.06.2014, 23:49
kingzfate, я-то откуда знаю. Судя по всему, какой-то словарь.
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
08.06.2014, 00:32  [ТС]
Psilon, я про то, что как мне его открыть, если пишет что не хватает памяти?) Или все таки пытаться через MMP?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.06.2014, 00:37
kingzfate, MMP тут ничем не поможет, в строку же можно считать? Проблема в выводе в rtb. Делайте свой контрол и выводите в него Только мне кажется, это вам немножко не по силам. Да и мне тоже. Нужно быть хардкорным винапишником чтоб такое замутить имхо.
1
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
09.06.2014, 08:18
Цитата Сообщение от kingzfate Посмотреть сообщение
я про то, что как мне его открыть, если пишет что не хватает памяти?)
Не надо грузить в RichTextBox весь фаил, грузи маленькими кусками поочередно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.06.2014, 08:18
Помогаю со студенческими работами здесь

MemoryMappedFile обмен данными
Эти две функции находятся в разных программах (одна в одной, другая в другой). SetClientData отправляет данные, GetClientData успешно...

MemoryMappedFile и доступ к реальному файлу
Здравствуйте! Проблема в следующем: создаю MemoryMappedFile, исползуя CreateFromFile(), после чего файл на жёстком диске, который я,...

Считывание введенных данных, определение их типа и сохранение в виде массива данных
Написать программу, которая осуществляет считывание в веденных данных, определяет их тип и сохраняет в виде массива данных. Результатом...

Добавление записи в базу данных и считывание из базы данных
Здравствуйте! Знаю, что эти вопросы поднимались уже тысячи раз, но помогите пожалуйста. Написала код добавления записи в БД. Сколько...

Считывание из текстового файла выборочных данных, сортировка данных по возрастанию и последующая запись в другой файл
Дан файл: 0.3000000E+01 0.1000000E+03 501 1 1 0.00000000E+00 0.00000000E+00 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru