Как избежать и предсказать исключение «Недостаточно памяти» - PullRequest
1 голос
/ 24 октября 2011

Итак, если у меня есть List<Bitmap> myBitmaps, где я должен хранить много битовых карт из базы данных, и это может быть исключение нехватки памяти, как я могу избежать этого.

Должен ли я хранить связкуизображений на жестком диске, чем загрузка другого пакета после первой обработки пакета и т. д.

Другой случай, если я загружаю Base64 и кодирую в String и String в Base64 для большого объема данных, как я могу добиться этого, не вызываяИсключение нехватки памяти, и как я могу предсказать, будет ли исключение нехватки памяти в обоих случаях.

PS: Если кто-то предлагает решение, пожалуйста, объясните, если оно снижает производительность и почему.

Ответы [ 3 ]

1 голос
/ 24 октября 2011

Судя по звуку, кажется, что Bitmaps большие, и нецелесообразно хранить их все в памяти. Если вы выполняете массовые операции на нем, то переключение на диск, безусловно, приведет к снижению производительности, но, учитывая, что в реальном мире вы работаете с аппаратными ограничениями, вариантов нет.

Возможно, вы сможете кэшировать определенные метаданные о растровых изображениях в памяти для ускорения операций. Другой вариант - кэшировать все растровые изображения в памяти и переходить на диск, когда данные недоступны в основной памяти.

Точные данные, которые вы кэшируете, снова будут зависеть от схемы использования. Рассмотрите возможность использования WeakReference.

Преобразование Base64 для больших данных может быть легко преобразовано в онлайн-алгоритм , преобразующий небольшое количество данных за раз.

0 голосов
/ 24 октября 2011

Если растровые изображения такие большие, вы можете просто загрузить их одну за другой. Каждый раз, загружая только одно растровое изображение, обрабатывайте его, не забывайте Dispose() его и затем переходите к другому растровому изображению.

Если выполнение множества запросов SQL, подобных этому, имеет для вас значение, загрузите и обработайте растровые изображения в виде групп N (где N зависит от ваших конкретных обстоятельств). Нет необходимости сохранять их на диск, для этого и нужна база данных.

0 голосов
/ 24 октября 2011

Я бы предпочел хранить такую ​​(возможную) массу данных в базе данных.Производительность с базой данных зависит от базы данных, оборудования и подключения к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...