powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO.Net и большие объемы данных
42 сообщений из 42, показаны все 2 страниц
ADO.Net и большие объемы данных
    #35963006
Добрый день!
Столкнулись со следующей проблемой в ADO.Net.

Есть таблица на SQL сервере, для простоты - одна таблица. В настоящее время она занимает 61Мб.
При загрузке этой таблицы в DataTable "съедается" ровно 160 Мб (а если использовать DataSet и DataTable, то немножко побольше - 168Мб). В дальнейшем эта таблица грузится не в стандартный DGV, а в самописный контрол, к-росто летает (очень быстро скроллирует и перемещается по таким большим данным). НО уже сейчас у программы начинаются проблемы (нехватка памяти), а в дальнейшем таблица будет только расти.

Одна из задач программы - показать все данные сразу (так удобнее работать клиенту, и так работают программы у конкурентов). Т.н. "paging" (как на интернет-форумах - показывать постранично, с кнопками "следующая страница", "предыдущая страница", и т.п.) нельзя использовать, т.к. неудобно пользоваться.

В то же время, MS Sql 2k5 Management Studio, написанная также на C# и Ado.Net, легко справляется с подобными данными, и даже гораздо большими. Например, полное открытие (не select * from table, а именно right click on table -> open table) открывает всю таблицу, используя 12Мб ОЗУ, а когда мы проскроллим всю эту таблицу до самого конца, у нас будет израсходовано еще столько же - 12Мб ОЗУ.

Таким образом, если мы по-простому (как в учебнике ADO) открываем таблицу, то расходуется 160Мб, а SQL Management Studio на это же действие расходует всего лишь 12-24Мб. Есть предположения, как она это делает?

И вопрос в догонку - почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Может, настройка такая есть?
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963008
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XML наше все в ado.net
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963013
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И сколько можно говорить, ну не может живой человек работать с такими объемами , сделайте фильтры пусть выбирает что ему нужно. Хочет видеть все пусть видит - но медлееееено.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963046
Что значит "XML наше все"? Прокомментируйте.

Что касается фильтров = конечно же, они есть. Я не говорю, что пользователю отображается вся таблица, я сказал "вся таблица грузится в память". Грузится для того, чтобы пользователь одновременно мог наложить любое количество фильтров и отобразить любое количество вкладок с данными. Таким образом, таблицу мы загружаем в память один раз, а показываем уже либо всю, либо фильтрованные части. И при наложении каждого нового фильтра память уже не расходуется.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963057
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это значит что в датасете ваши данные как xml хранит.

Фильтры это значит фильтры на сервере, а не все данные на клиента, а потом их фильтруем
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963058
КхеИ сколько можно говорить, ну не может живой человек работать с такими объемами , сделайте фильтры пусть выбирает что ему нужно. Хочет видеть все пусть видит - но медлееееено.
Не обобщайте. Если Вы неспособны работать с большими объёмами - это не означает, что кто-то другой не способен.


Автору - выбросьте весь этот адонет с фреймворком нахер
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963063
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пропала Планета
Не обобщайте. Если Вы неспособны работать с большими объёмами - это не означает, что кто-то другой не способен.

Вы и есть этот кто то?)
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963065
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТрудностьВ_ADO,

http://www.rsdn.ru/article/dotnet/DataGridView20.xml#EOAAE
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963068
Уважаемые, но ведь SQL Server Management Studio успешно работает, и быстро, и с большими (гораздо большими, чему у меня) объемами! Вопрос - как она это делает?
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963075
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может он не в датасет загружает данные, как считаете?)
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963098
Кхе,

Насчёт больших объёмов - да, в частности я. И я не одинок


По поводу менеджмент студии - ееё тоже можно уложить приличным объёмом данных


Автору же помочь может грид в виртуальном режиме(от любого производителя).данные могут при этом лежать хоть в dbf , хоть в текстовом файле, хоть в локальной СУБД.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963130
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пропала Планета,

Не поделитесь с каким объемами вы работаете в дататэйбл?
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963156
Вообще, идея насчет виртуального режима интересная. Данные у нас лежат сейчас в xml на жестком диске, но можно сделать и dbf, и mdb, и даже SQL Compact CE.

Только вот еще задача: должна поддерживаться сортировка. Виртуальный режим позволит применять сортировку таблицы?
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963417
Спасибо за наводку на виртуальный грид!

Теперь я знаю на 100%: в SQL Management Studio именно так и реализовано.
Теперь память не "съедается", максимум - 26Мб, и работает все быстро.

Хороший пример здесь: http://msdn.microsoft.com/ru-ru/library/ms171625.aspx
Пример использует базу Nortwind, но не заточен под нее, будет работать с любой другой таблицей, где первый столбец - уникальный ключ. Сотня тысяч строк - и все летает (ну насколько стандартный dgv вообще может летать...).
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963488
Фотография Ъй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда.. я вот сейчас с ораклом. вожусь... секционированная таблица, 48 полей, ~2 млрд. записей. Интересно, что будет, если я всю эту таблицу попробую грузануть на клиента?..

Первым делом мы испортим самолёты.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963490
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КхеЭто значит что в датасете ваши данные как xml хранит.
Это значит, что надо открыть рефлектор и посмотреть, что там и как хранится, а не молоть чепуху.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963899
Ъй, меряться с Вами тяжело = у вас больше :)
Всему же есть разумные пределы, про миллиард записей речь не шла :)
Сейчас у меня ~60 тыс. записей, при любом раскладе будет никак не больше 600 тыс., скорее всего будет меньше 300 тыс. записей одновременно.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963905
Уважаемые, а почему никто не обратил внимание на второй вопрос из первого поста:
почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Просто непонятно, как может быть out of memory в системе, где существует файл подкачки...
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963955
Фотография дерево
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТрудностьВ_ADOУважаемые, но ведь SQL Server Management Studio успешно работает, и быстро, и с большими (гораздо большими, чему у меня) объемами! Вопрос - как она это делает?

Очень просто. Любая таблица данных разбита в MS SQL на страницы определенного фиксированного размера. А не лежит тупо целиком. Как это делаете вы. Скачала первый кадр - страницу - подкачивает второй. потом третий, но при этом первый выбрасывает. Грубо говоря тот же самый пейджинг.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35963965
Фотография дерево
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТопикстартерУважаемые, а почему никто не обратил внимание на второй вопрос из первого поста:
почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Просто непонятно, как может быть out of memory в системе, где существует файл подкачки...

Читайте про CLR. Принцип организации памяти в среде. Управляемая куча. Стек.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35964062
Вроде бы решили задачу: поставили SQL CE, сунули в него эту большую таблицу. Нарисовали грид в виртуальном режиме - все бы замечательно. Но, как Вы знаете, существует не так много способов организации PAGING (постраничная выборка) при использовании MS Sql.

Учитывая что SQL CE не умеет работать с row_number и не умеет делать set rowcount, этих способов остается еще меньше - два или три. При этом на 60 тыс. записей возникает следующая проблема = первые страницы возвращаются быстро, чем дальше - тем медленнее, последние страницы вообще еле-еле ворочаются :(

Модератор: Тема перенесена из форума "C#.NET".
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #35966296
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая штука - LinqDataSource у DevExpress, на его GridControl преблема решается совершенно прозрачно. Любой объем данных, скроллится быстро в любую сторону, память при этом расходуется минимально.

все когда-нибудь начинается снова
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36025237
Antoshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТопикстартерУважаемые, а почему никто не обратил внимание на второй вопрос из первого поста:
почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Просто непонятно, как может быть out of memory в системе, где существует файл подкачки...

Курим доки про "распределение адресного пространства процесса Win32"
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36026670
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хах, спустя месяц этот потерянный топик нашел знаток венды Антошка и сказал как отрезал, курите про вин32. Антошка, вин32-то тут причем со своим адресным пространством? разъясни что ты там прочитал :)
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36028719
Antoshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зыхах, спустя месяц этот потерянный топик нашел знаток венды Антошка и сказал как отрезал, курите про вин32. Антошка, вин32-то тут причем со своим адресным пространством? разъясни что ты там прочитал :)

Программы где выполняются? В процессах операционной системы, причём не важно .Net ли это, либо native-код. Всего один процесс может адресовать не больше 4Гб (2^32, если кто не помнит). Далее, ОС забирает под свои нужны верхние 2 Гб в КАЖДОМ процессе пользователя, делая их недоступными за некоторыми исключениям. Следовательно, программе осталось уже не более двух Гб. Потом ещё веселее: в эти два гигабайта подгружаются код и глобальные данные программы и всех используемых dll, в т.ч. системных типа user32.dll. Там же на каждый поток создаются стеки (а это по умолчанию 1 Мб на поток) и системные кучи. В итоге пользователю останется доступно порядка 2000 Мб. Если их все занять, то адресное пространство процесса исчерпается и вывалится знаменитое OutOfMemory. Подробнее на http://www.thevista.ru/page.php?id=10539&print=1
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36030719
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antoshka

харош бездумно копипастить, ты не ответил на главный вопрос - какого фига не используется виртуальная память?
и, да, что делать если у меня x64? :)
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36032455
Antoshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зыAntoshka

харош бездумно копипастить, ты не ответил на главный вопрос - какого фига не используется виртуальная память?
и, да, что делать если у меня x64? :)

Ты хоть читаешь, то что пишут? Если у тебя x64, то всё будет ОК. А вот если на x86 у тебя будет 3 гБ пользовательских данных, то куда ты их уложишь, если у тебя всего порядка 2000 Мб адресного пространства. Даже если они будут лежать в свопе, то всё равно место в АП процесса они занимают. Чтобы обойти эту беду, необходимо организовать специальное окно в адресном пространстве процесса, в которое при необходимости маппить необходимые порции данных из файла подкачки. Кстати, примерно так работают с очень большими файлами: замаппили кусочек в память, обработали, отменили маппинг - перешли к следующему куску.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36032879
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antoshka
Ты хоть читаешь, то что пишут? Если у тебя x64, то всё будет ОК.

твоя проблема в том, что как раз ты тут и не читаешь. Про архитектуру процессора никто даже не заикался, кроме тебя с твоим "Win32".


дальше у тебя много слов опять не по теме, комментировать не буду. Повторю исходный вопрос - он был не в том, почему приложение не может воспользоваться более чем N гигабайтами оперативы, он был в том, почему .net не использует виртуальную память. Разницу способен понять? И ответ на этот вопрос лежит не в статьях про Win32, а в описании CLR и сборщика мусора и особенностях их работы. Иди читай, потом расскажешь.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36033232
Antoshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, вернёмся к истокам...

ТрудностьВ_ADOДобрый день!
И вопрос в догонку - почему с#, framework, ado.net не используют виртуальную память, а вылетают с исключением "Out of memory"? Может, настройка такая есть?

Ты хочешь сказать, что дотнет получает память от операционной системы в обход стандратного WinAPI? Ты ошибаешься, он также точно где-то в своих дебрях вызовает VirtualAlloc, который имеет те же самые грабли с "Out of memory", о которых я рассказывал. Ниже приведена программа, которая легко это доказывает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        /// <summary>
        /// Размер одного выделяемого блока в байтах
        /// </summary>
        private const int blockSize = 1000 * 1024 * 1024;

        static void Main(string[] args)
        {
            // список для хранения ссылок, чтобы GC не пытался что-нибудь осводобить
            List<byte[]> list = new List<byte[]>();

            try
            {
                //выделяем память блоками
                for (int i = 1; ; i++)
                {
                    list.Add(new byte[blockSize]);
                    Console.WriteLine(i);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            } 

            Console.ReadLine();
        }
    }
}

Запусти, и увидишь, что далее двух шагов она не пройдёт, если, конечно процесс не x64 (в этом случае она будет продолжать работать до исчерпания ОЗУ и файла подкачки). Но, опять же, топикстартер не упомянул версию своей операционной системы.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36033552
cyber-fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не нужно показывать все данные сразу, пусть пользователь/автор программы конкретизирует выборку и на одну проблему меньше
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36034552
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antoshka
Запусти, и увидишь, что далее двух шагов она не пройдёт, если, конечно процесс не x64 (в этом случае она будет продолжать работать до исчерпания ОЗУ и файла подкачки). Но, опять же, топикстартер не упомянул версию своей операционной системы.
ололо, а у меня даже один шаг ниасилила, к чему бы это? винда 2008 x32, 2гб оперативы.

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
	class Program
	{
		/// <summary>
		/// Размер одного выделяемого блока в байтах
		/// </summary>
		private const int blockSize = 1024 * 1024;

		static void Main(string[] args)
		{
			// список для хранения ссылок, чтобы GC не пытался что-нибудь осводобить
			List<byte[]> list = new List<byte[]>();

			var r = new Random();
			try
			{
				//выделяем память блоками
				for (int i = 1; ; i++)
				{
					var b = new byte[blockSize];
					for (var j = 0; j < b.Length; j++)
						b[j] = (byte)r.Next();
					list.Add(b);
					Console.WriteLine(i);
				}
			}
			catch (Exception e)
			{
				Console.WriteLine(e.Message);
			}

			Console.ReadLine();
		}
	}
сиди и наблюдай в таскменеджере за процессом, потом расскажешь на скольки у тебя отвалилось и почему это оно так происходит. И, кстати, не забудь заодно поведать нам, какая у тебя ось и сколько памяти стоит.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36034619
Antoshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы
ололо, а у меня даже один шаг ниасилила, к чему бы это? винда 2008 x32, 2гб оперативы.

:) и ты тут ещё про своп рассуждаешь..

зы
давай усложним твой пример, ну так чтобы память реально выделялась и использовалась, а не просто резервировалась под возможные нужды.
Да будет тебе известно, что дотнет при выделении памяти усердно инициализирует её нулями. Так что нет никакой разницы между моим и твоим кодом за исключением размера блока.

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

Результаты:
1) моя рабочая машина, Vista x64 2Gb - моя прога доходила до 4-5 и вываливалась, что соответствовало 4-5 Гб всей доступной памяти (ОЗУ+файл подкачки). Твоя прога честно дошла до 5334. Результат по объёму аналогичный;
2) тестовый сервер Win 2003 x86, 16 Gb, /PAE включен. Моя прога стабильно отваливалась после цифры 2, твоя - после 1725. Включи мозг и подумай, почему, при наличии дофига ОЗУ + хз сколько места в файле подкачки, больше двух гигов процесс сожрать не может?
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36162897
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Случайно наткнулся на топик. Жестко Антошка упертого рогом в забор зы отодрал :)
Про ваш спор - баян столетней давности про распределение памяти под своппинг, зы - двойка :)
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36163740
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, тебя-то драли, дерут и драть будут, до сих пор иногда ржу над твоими перлами. Надолго разбанили-то?

Antoshka,
к сожалению, в разгар спора мне не хватило времени проверить один момент, поскольку я уехал на несколько недель, а потом забыл :( (МСУ может даже не пытаться глумиться что это типа отмазка, данный любитель некропостов может поискать мои сообщения за этот период - не найдет ни одного).

момент заключался в том, чтобы уточнить, как это работало на старом .нет, поскольку не отрицаю что в новом они много чего улучшили, включая работу с памятью, а со времен 1.1 я помнил что на виртуальную память были ограничения. Общая суть такая, что своп и сборщик мусора плохо совместимы с собой, поскольку своппинг пытается засунуть неиспользуемые страницы на диск, а сборщик - найти среди неиспользуемых то, что можно выкинуть, поднимая тем самым страницы с диска обратно в память. Несмотря на то, что синтетические тесты показывают возможность выделения большого объема на 64-битной ОС, в реальности, если далеко выбраться за пределы доступной физической, реальное приложение начнет сильно тормозить себя и систему в целом. Хуже, если несколько .нет приложений работают на одном сервере (веб сервер, например), тогда у них начнется конкуренция за физическую память, что приведет к общей деградации производительности. Очевидно, что то, что я написал выше, справедливо для любых приложений - нет свободной памяти, система свопит и тормозит, но с .net этот эффект значительно хуже, потому что сборщик мусора не дает страницам долго покоиться на диске, в отличие от обычных приложений, которые можно надолго частично схоронить.

авторДа будет тебе известно, что дотнет при выделении памяти усердно инициализирует её нулями. Так что нет никакой разницы между моим и твоим кодом за исключением размера блока.
разница, как ни странно, есть, и её отчетливо видно в таскменеджере. Чтобы её объяснить - надо дальше углубляться в работу менеджера памяти, сейчас нет на это времени.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36163867
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет времени, работа, ... Зы, Вы похожи на нашкодившего первоклассника :)
Да не расстраивайтесь так, все когда-то с чего-то начинали. У Вас еще всё впереди :)
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36163981
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ТрудностьВ_ADO, 30 апр 09, 18:30 [7135839]
> ... При этом на 60 тыс. записей ...
Здесь рассказано как строился прототип защищенных распределенных многоуровневых информационных систем. Задачу страничной подкачки также пришлось решать. Я сразу отбросил вариант закачки в кеш клиентского компьютера полной выборки запроса. Не реально это по медленным каналам. Жизнеспособна только страничная подкачка. Разные варианты реализации её приведены в статьях.
На миллиарде записей не проверял. Но на 60 тыс. не должно быть существенной разницы во времени получения первой и последней страницы.

С уважением, Владимир.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36163984
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ТрудностьВ_ADO, 30 апр 09, 18:30 [7135839]
> ... При этом на 60 тыс. записей ...
Здесь рассказано как строился прототип защищенных распределенных многоуровневых информационных систем. Задачу страничной подкачки также пришлось решать. Я сразу отбросил вариант закачки в кеш клиентского компьютера полной выборки запроса. Не реально это по медленным каналам. Жизнеспособна только страничная подкачка. Разные варианты реализации её приведены в статьях.
На миллиарде записей не проверял. Но на 60 тыс. не должно быть существенной разницы во времени получения первой и последней страницы.

С уважением, Владимир.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36246278
krudensoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно использовать серверный курсор и датагрид в виртуальном режиме.

У меня на 40 тыс записей открывает курсор около полусекунды, затем работает (скроллит) очень быстро. Так же реализовал сортировку, поиск и фильтрацию. Народ доволен.

Память на клиенте практически не используется (полмегабайта - можно пренебречь). В памяти держится только то, что выведено на экране.
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36246458
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серверные курсоры обладают феноменально низкой производительностью, кроме того, не имеют должной поддержки со стороны ado.net. Наверное, ты все-таки хотел воспользоваться пейджингом?
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36334112
По поводу SQL Management Studio.

Информирую.
Студия использует диск для хранения прочитаных с сервера данных.
Аналогичным образом делает старый добрый jet (движок Access), но он более интеллектуальный и поддерживает разные курсоры с разной функциональностью.

Только студийный вариант свой и не поддерживает фильтров и сортировки.
В памяти хранятся только указатели на смещение в этом файле кэша (я так думаю).
Данные читаются только в одном направлении, пока не будет достигнута последняя запись. Скажем, нельзя быстро перейти в конец и листать в обратном направлении.
Используется ADO.NET forward-only курсор (DataReader).

С уважением,
Павел
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36492733
krudensoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы,

Для отчитки по 100 строк для показа страниц на экране - самое то.
У меня написан класс на iBindingList - все прекрасно вяжеться с гридом.

Но есть несколько минусов:
1. Не сделать нормальный поиск - все равно придется все перебрать
2. Фильтрация и сортировка - только для запросов (select) для хранимок не получится (или нужно задавать жестко параметры для хранимок)

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

Но для простых списков (например справочник товаров (>100 тыс), список накладных и т.п.) работает нормально, гораздо лучше, чем тянуть все в память
...
Рейтинг: 0 / 0
ADO.Net и большие объемы данных
    #36492757
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krudensoft1. Не сделать нормальный поиск - все равно придется все перебрать
Вы просто не умеете писать SQL-запросы или пользовать ORM.

krudensoft2. Фильтрация и сортировка - только для запросов (select) для хранимок не получится (или нужно задавать жестко параметры для хранимок)
Вы просто не умеете писать SQL-запросы или пользовать ORM.

krudensoftВсе это из-за того, что на скуле нет нормальных средств для выборки из запроса по принципу "с 100 записи выбрать 200 штук".
Вы просто не умеете писать SQL-запросы или пользовать ORM.

krudensoftНо для простых списков (например справочник товаров (>100 тыс), список накладных и т.п.) работает нормально, гораздо лучше, чем тянуть все в память
Вы просто не умеете писать SQL-запросы или пользовать ORM.
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO.Net и большие объемы данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]