![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
m9yt |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Привет всем. Делаю небольшой текстовый редактор и натолкнулся на следующую проблему:
при загрузке достаточно большого файла через StringBuilder вылетает OutOfMemoryException, что логично. Но, пытаясь вызвать метод Clear() у объекта StringBuilder, вновь вылетает то же исключение. Что за дела? Не могу очистить память от большого файла.
|
|||
|
||||
dextermd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 21.6.2008 Репутация: нет Всего: нет |
Данный метод можно упростить следующим образом:
1) Выкинуть FileStream; 2) Вместо StringBuilder'a использовать метод ReadToEnd() из класса StreamReader; 3) Вместо блока finally обернуть StreamReader в блок using, таким образом после завершения работы StreamReader'a все ресурсы освободятся автоматически; 4) Для определения имени файла использовать статический метод Path.GetFileName().
Это сообщение отредактировал(а) dextermd - 14.4.2012, 20:45 |
|||
|
||||
erm0l0v |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
Вы не можете разместить в памяти файл произвольного размера. В Notepad например помойму файлы разметом 13+ МБ вообще не загружаются.
Если вы хотите сделать редактор который сможет редактировать любые файлы придется загружать их по блокам. Но тут встает вопрос с освобождением памяти, как C# будет память освобождать это большая загадка. Метод Clear совсем не обязан освободить память он только закрывает ресурсы. |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
гуглить про MemoryMapedFiles попробуйте - оно поможет жить... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |