mohsen_popo Ответов: 2

Как выбрать 3 миллиона записей из таблицы с помощью EF?


Привет...
У меня есть таблица с 3 миллионами записей.
когда я хочу выбрать Показать ошибку

Необработанное исключение типа ' System.OutOfMemoryException ' произошло в EntityFramework.dll

Почему ?..?
Я буду благодарен, если кто-нибудь сможет помочь.

Что я уже пробовал:

Hi ...
I have a table with 3 million records.
when I want Select Show Error

An unhandled exception of type 'System.OutOfMemoryException' occurred in EntityFramework.dll

Why ..??
I will be grateful if anyone can help.

Richard MacCutchan

Не, когда-либо. Пытаться прочитать 3 миллиона записей за один раз просто смешно.

mohsen_popo

Итак, как я могу отображать данные в виде сетки для пользователя ?..

Richard MacCutchan

Что значит "как"? Вы пишете SQL-запрос, чтобы получить подмножество записей из вашей базы данных, и привязываете их к DataGridView. Google найдет для вас множество учебных пособий, чтобы показать, как это сделать.

Richard MacCutchan

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

[no name]

Простой. Запросите разумное количество записей.

F-ES Sitecore

Используйте что-то более низкое, например ado.net и используйте серверные курсоры или SqlDataReader, который позволит вам обрабатывать данные строка за строкой без необходимости загружать все 3 000 000 записей в память одновременно.

Это предполагает, что вы занимаетесь какой-то обработкой данных и не пытаетесь показать записи 3m пользователю, поскольку это просто смешно.

2 Ответов

Рейтинг:
2

OriginalGriff

Подумайте о том, что вы пытаетесь сделать на мгновение: 3 000 000 строк любого значительного числа символов очень быстро складываются в огромный объем памяти. Если у вас есть два столбца, каждый длиной 100 символов, то вы пытаетесь получить как минимум 3 000 000 * 200 байт: 600 мегабайт без какой-либо упаковки (которых там очень много). Если бы каждая строка содержала небольшую миниатюру сотрудника, то вы могли бы получить пару гигабайт в мгновение ока! Разумно ли вообще пытаться получить столько информации за один раз? Нет-потому что вы даже не можете обработать его так быстро, не говоря уже о том, чтобы показать его пользователю!
Это все равно, что купить все буханки хлеба, которые вам понадобятся на всю жизнь сегодня, потому что цена вырастет на следующей неделе. Вы можете сэкономить деньги,но вам нужно найти запасной дом, чтобы хранить их, держать паразитов подальше, найти деньги вперед и т. д.

Итак, как сказали Ричард и NPC: даже не думайте о том, чтобы получить так много за один раз: страница, Поиск, возврат только тех столбцов, которые вам действительно нужны, а также только тех строк, которые вам нужны: но не пытайтесь получить все это за один раз!


mohsen_popo

Итак, как я могу отображать данные в виде сетки для пользователя ?..

OriginalGriff

Выгружаемый.
Разыскиваемый.
Фильтрованный.

Но если вы считаете, что пихать 3 000 000 строк перед Пользователем-это хорошая идея, то вам нужно срочно пройти курс дизайна пользовательского интерфейса!
Как вы думаете, сколько времени потребуется пользователю, чтобы найти интересующую его информацию, учитывая, что нужно посмотреть столько строк? Весь день? Дольше?
И как быстро он собирается вернуться к вашему приложению, чтобы использовать его снова?
Лично я бы немедленно удалил его и хотел бы вернуть свои деньги...с интересом...

Рейтинг:
1

Patrice T

Цитата:
Необработанное исключение типа ' System.OutOfMemoryException ' произошло в EntityFramework.dll
Почему ?..?

Проблема очевидна: недостаточно памяти для обработки 3 000 000 записей.

Подумайте о ситуации: у вас есть 3 000 000 записей, извлеките их за 1 раз и сбросьте в сетку-это просто для вас, но сетка из 3 000 000 записей практична ли она для пользователя ?
сколько времени требуется, чтобы получить записи с сервера ? сколько времени требуется, чтобы построить сетку ?

Если у вас есть один пример сетки с 3 000 000 строк, которая является лучшим представлением для пользователя и лучшим средством поиска данных, пожалуйста, поделитесь.

Вы должны думать о других способах отображения данных.
Как работает yellow pages (телефонные номера) в вашей стране ? 1 одна сетка, и вы просматриваете миллионы записей ?