OriginalGriff
Цитата:
... когда я прочитаю картинки из БД, появится сообщение “Out of Memory”.
Начните с того, как Вы читаете данные из БД:
Если вы используете
SELECT * FROM ...
Затем не перечисляйте свои поля, чтобы не возвращать больше данных, чем вам нужно.
Затем посмотрите, что вы используете для извлечения данных - если ваш код использует SqlDataAdapter для заполнения DataTable или DataSet, то это требует, чтобы SQL Server собрал все данные вместе и передал их в виде одного куска - изображения могут быть довольно большими, так что если их много, то это может перегрузить вашу систему или SQL server (и если вы работаете с локальной БД для разработки, помните, что это означает, что по крайней мере в два раза больше пространства данных требуется на одной машине). Попробуйте переключиться на DataReader, который возвращает строки по требованию, а не все сразу.
Затем посмотрите на количество строк, которые вы извлекаете: если только вы не используете
WHERE
пункт на вашем SQL вы получите все из них, так что вполне возможно, что вы получаете большое количество изображений, которые вам не нужны. Добавьте предложение WHERE или попробуйте возвращать данные на страницах по десять или двадцать, а не все сразу, что также должно уменьшить использование памяти.
И следите за монитором памяти в отладчике во время запуска вашего приложения - посмотрите, сколько оно на самом деле использует (ошибки"из памяти" вызваны не только нехваткой "реальной памяти" - вы также получаете его для ограниченных ресурсов, таких как дескрипторы и графические контексты, так что это может быть какая-то другая часть вашего кода, которая на самом деле вызывает проблему. Проверьте сведения об исключении в отладчике, чтобы попытаться найти дополнительную информацию.