![]() |
|
Модераторы: gambit |
![]()
|
|
| voladu |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 7.5.2009 Репутация: нет Всего: нет |
Здравствуйте!
Занимаюсь чтением файлов из поля BLOB базы на SQL server. Делал по примеру. Все вроде хорошо, но несмотря на вызов методов Close и Dispose для объектов FileStream и BinaryWriter память не освобождается. Это выражается в том, что в процессе чтения файла из базы в диспетчере задач видно увеличение объема занятой памяти и увеличение процесса программы ("MyProg.vshos"). После принудительного запуска GarbageCollector память в процессе освобождается, но общая занятая память не освобождается. Каким образом это можно решить? Вот используемый код:
Дополнительно вызываю такое, но безуспешно:
|
||||
|
|||||
| guro |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 24.4.2009 Репутация: нет Всего: нет |
А Dispose для abBytes можно сделать?
|
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 1 Всего: 59 |
Память освободится если она потребуется системе. До тех пор, пока она ей не нужна, она не будет делать никаких движений по реаллокации данных. Dispose сделал и будь спокоен. PS: using сам делает Dispose своей переменной, для этого и существует вся эта конструкция. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| voladu |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 7.5.2009 Репутация: нет Всего: нет |
Нет у него такого метода.
После некоторого тестирования оказалось что так оно и происходит. Спасибо! Конечно несколько настораживает, что оно съедает всю память, которая есть. А для работы понемножку освобождает, но совсем немного. Полный сбос происходит после закрытия программы. |
||||
|
|||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 8 Всего: 49 |
voladu, вообще-то у тебя очень сомнительно сделано чтение. что делает GetDocFilePointer? PtrFile, судя по типу byte[] это никакой не "указатель", а просто массив в памяти, в который GetDocFilePointer вычитывает сразу все данные из базы. И потом ты вместо bwFile.Write(PtrFile) перегоняешь данные еще через один массив. Память во время операции при этом отъедается под весь документ.
Cтандартный метод "получить указатель на файл в базе" - это ExecuteReader с CommandBehavior.SequentialAccess, с последующим чтением кусков через DataReader.GetBytes(). Покопай MSDN на эту тему. Это сообщение отредактировал(а) PashaPash - 13.5.2009, 17:40 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |