Программисты зайдите
Я работаю экономистом, но для облегчения работы прибегаю к помощи программирования. Раньше я писала макросы на VBA для Excel и Access. Потом мне дали новый компьютер, но MS Office на него не установили, сославшись на то, что покупать лицензию дорого, а Access вообще в стандартные сборки не входит. Так что специально для меня никто его покупать не будет. Предложили изучать С# и SQL-сервер, так как это единственный бесплатный вариант. Я изучила, написала приложение, но проблема в том, что оно тормозит. Я работаю с большими объемами данных. Например, есть таблица 27 столбцов х 40000 строк. Когда ее выводишь в табличную сетку (DataGridView), то она очень сильно тормозит. Я пробовала ее дробить на несколько частей, типа страниц, но это не сильно помогает, а дробить совсем мелко не имеет смысла. Я искала в гугле, оказывается у многих такая проблема, но нормального решения я не нашла. Может вы мне что-то посоветуете? Или может мне начать изучать другой язык программирования, где это получше реализовано?
Автор
32 ответа
Последний —
Перейти
Гость
Здесь Вам только про анальную бахромку ответят.
Гость
Индексы
Гость
Я не программист. Просто зашёл выразить своё восхищение бабе-программистке.
Гость
Баба-програмистка, от счастья не опписайся, что местный пустослов тебя заценил! Он по делу ничего не сказал ни разу, только оценивает ходит.
Гость
Индексы здесь не при чем. Здесь проблема не на стороне сервера, а на стороне клиента. DataGridView сам по себе тормозной элемент управления. Может быть есть способ как-то оптимизировать его работу? Или может что-то другое попробовать? Я читала, что на яве есть аналогичный контрол jTable. Мне интересно, а с ним так же все будет работать или лучше? Может мне тогда яву изучать или другой какой язык?
Гость
Я с базами данных работала о-очень давно. Если вам не ставят Microsoft Office из-за лицензии, то попросите пусть поставят Openoffice. Эта прога совершенно бесплатна, и там есть аналог аксесу в виде OpenOffice Base.
Ну или как вариант можно поискать портабл версию Microsoft Access.
Ну или как вариант можно поискать портабл версию Microsoft Access.
Гость
Я с базами данных работала о-очень давно. Если вам не ставят Microsoft Office из-за лицензии, то попросите пусть поставят Openoffice. Эта прога совершенно бесплатна, и там есть аналог аксесу в виде OpenOffice Base.
Ну или как вариант можно поискать портабл версию Microsoft Access.
Ну или как вариант можно поискать портабл версию Microsoft Access.
Я пробовала пользоваться портабельной версией Office, но на Win10 она не работает. К тому же использовать на работе нелец. софт незаконно. Если меня поймает сис. админ, то по головке не погладит. А в OpenOffice тоже есть VBA? Там тоже можно программировать? А то стандартная функциональность меня скорее всего не устроит.
Гость
Что именно тормозит?
Загрузка данных? Скролл? Ячейки константные или там расчеты где-то не кешируются?
Загрузка данных? Скролл? Ячейки константные или там расчеты где-то не кешируются?
Гость
+
Гость
Там вроде есть OpenOffice Basic, но он возможно отличается от vba.
А по поводу того, что у вас не работает портабл версия Access, попробуйте поискать именно портабл для Win 10, у меня при переходе на десятку тоже некоторые приложения тоже не работали. Например, автокад пришлось искать с разрядностью 64 и гораздо более новой версии чем тот, что был до этого.
А по поводу того, что у вас не работает портабл версия Access, попробуйте поискать именно портабл для Win 10, у меня при переходе на десятку тоже некоторые приложения тоже не работали. Например, автокад пришлось искать с разрядностью 64 и гораздо более новой версии чем тот, что был до этого.
Гость
Я пробовала пользоваться портабельной версией Office, но на Win10 она не работает. К тому же использовать на работе нелец. софт незаконно. Если меня поймает сис. админ, то по головке не погладит. А в OpenOffice тоже есть VBA? Там тоже можно программировать? А то стандартная функциональность меня скорее всего не устроит.
Там вроде есть OpenOffice Basic, но он возможно отличается от vba.
А по поводу того, что у вас не работает портабл версия Access, попробуйте поискать именно портабл для Win 10, у меня при переходе на десятку некоторые приложения тоже не работали. Например, автокад пришлось искать с разрядностью 64 и гораздо более новой версии чем тот, что был до этого.
А по поводу того, что у вас не работает портабл версия Access, попробуйте поискать именно портабл для Win 10, у меня при переходе на десятку некоторые приложения тоже не работали. Например, автокад пришлось искать с разрядностью 64 и гораздо более новой версии чем тот, что был до этого.
Гость
Хотя, может у вас просто биндинг...
Показывайте код вашего контрола, короче, по кофейной гуще никто гадать не умеет.
Показывайте код вашего контрола, короче, по кофейной гуще никто гадать не умеет.
В смысле код программы всей выложить? Так он большой и здесь не поместится. Если вы про источник записей, то у меня не биндинг, а пользовательский класс. Там есть поле DataTable которое формируется при создании экземпляра. Потом эта таблица разбивается на части по 5000 строк. Функция из пользовательского класса возвращает нужную таблицу, которая и служит DataSourc'ом для DataGridView.
Гость
Там вроде есть OpenOffice Basic, но он возможно отличается от vba.
А по поводу того, что у вас не работает портабл версия Access, попробуйте поискать именно портабл для Win 10, у меня при переходе на десятку некоторые приложения тоже не работали. Например, автокад пришлось искать с разрядностью 64 и гораздо более новой версии чем тот, что был до этого.
А по поводу того, что у вас не работает портабл версия Access, попробуйте поискать именно портабл для Win 10, у меня при переходе на десятку некоторые приложения тоже не работали. Например, автокад пришлось искать с разрядностью 64 и гораздо более новой версии чем тот, что был до этого.
В том-то и проблема, что под 10ку ничего нет. Был бы вариант поставить виртуальную машину с хр, но у меня нет прав администратора.
Гость
В смысле код программы всей выложить? Так он большой и здесь не поместится. Если вы про источник записей, то у меня не биндинг, а пользовательский класс. Там есть поле DataTable которое формируется при создании экземпляра. Потом эта таблица разбивается на части по 5000 строк. Функция из пользовательского класса возвращает нужную таблицу, которая и служит DataSourc'ом для DataGridView.
Залейте код на любой сервис для этого, например, без кода помочь вам не получится.
Ну, разве что гадая в духе "А двойная буферизация включена?" или "А доступ к ячейкам константный?" и т.п.
Ну, разве что гадая в духе "А двойная буферизация включена?" или "А доступ к ячейкам константный?" и т.п.
Эксперты Woman.ru
-
Леонова ОльгаПсихолог15 ответов -
Елизавета ПолетПсихолог5 454 -
Михаил ПанПсихолог309 ответов -
Анастасия ТолковановаПсихолог, специалист по...264 ответа -
Сергей ЗабиякоСемейный психолог136 ответов -
Елена КапитоноваКлинический психолог16 ответов -
Алёшина МарияПсихолог144 ответа -
Алексей СемкоПерсональный тренер,...111 ответов -
Сергей ГубановПсихолог34 ответа -
Ольга РебертПсихология человеческих...13 ответов
Гость
Навскидку: если тормозит само отображение, можно сделать вот так:
public partial class myDataGridView : DataGridView
{
public myDataGridView()
{
InitializeComponent();
DoubleBuffered = true;
}
И потом использовать его. Если тормозит сам пересчёт, то без профайлера гарантировать не буду, но например можно вот так сделать:
Если у вас постраничное отображение, не нужно разбивать таблицу на подтаблицы руками каждый раз.
При инициализации сделайте SELECT * FROM foo ORDER BY id (или любой другой столбец, какой хочется) FROM 0 TO 500;
Это будут первые 500. 0 и 500 вы можете посчитать как "текущая страница минус один умножить на количество на одной странице" и "текущая страница умножить на количество на одной". Первая страница это будет 0...500, вторая - 500...1000 и так далее.
При смене страницы на следующую/предыдущую просто берёте её номер, считаете FROM TO, делаете быстрый запрос и обновляете данные без необходимости хранить-разбивать скрытые куски.
public partial class myDataGridView : DataGridView
{
public myDataGridView()
{
InitializeComponent();
DoubleBuffered = true;
}
И потом использовать его. Если тормозит сам пересчёт, то без профайлера гарантировать не буду, но например можно вот так сделать:
Если у вас постраничное отображение, не нужно разбивать таблицу на подтаблицы руками каждый раз.
При инициализации сделайте SELECT * FROM foo ORDER BY id (или любой другой столбец, какой хочется) FROM 0 TO 500;
Это будут первые 500. 0 и 500 вы можете посчитать как "текущая страница минус один умножить на количество на одной странице" и "текущая страница умножить на количество на одной". Первая страница это будет 0...500, вторая - 500...1000 и так далее.
При смене страницы на следующую/предыдущую просто берёте её номер, считаете FROM TO, делаете быстрый запрос и обновляете данные без необходимости хранить-разбивать скрытые куски.
Гость
Навскидку: если тормозит само отображение, можно сделать вот так:
public partial class myDataGridView : DataGridView
{
public myDataGridView()
{
InitializeComponent();
DoubleBuffered = true;
}
И потом использовать его. Если тормозит сам пересчёт, то без профайлера гарантировать не буду, но например можно вот так сделать:
Если у вас постраничное отображение, не нужно разбивать таблицу на подтаблицы руками каждый раз.
При инициализации сделайте SELECT * FROM foo ORDER BY id (или любой другой столбец, какой хочется) FROM 0 TO 500;
Это будут первые 500. 0 и 500 вы можете посчитать как "текущая страница минус один умножить на количество на одной странице" и "текущая страница умножить на количество на одной". Первая страница это будет 0...500, вторая - 500...1000 и так далее.
При смене страницы на следующую/предыдущую просто берёте её номер, считаете FROM TO, делаете быстрый запрос и обновляете данные без необходимости хранить-разбивать скрытые куски.
public partial class myDataGridView : DataGridView
{
public myDataGridView()
{
InitializeComponent();
DoubleBuffered = true;
}
И потом использовать его. Если тормозит сам пересчёт, то без профайлера гарантировать не буду, но например можно вот так сделать:
Если у вас постраничное отображение, не нужно разбивать таблицу на подтаблицы руками каждый раз.
При инициализации сделайте SELECT * FROM foo ORDER BY id (или любой другой столбец, какой хочется) FROM 0 TO 500;
Это будут первые 500. 0 и 500 вы можете посчитать как "текущая страница минус один умножить на количество на одной странице" и "текущая страница умножить на количество на одной". Первая страница это будет 0...500, вторая - 500...1000 и так далее.
При смене страницы на следующую/предыдущую просто берёте её номер, считаете FROM TO, делаете быстрый запрос и обновляете данные без необходимости хранить-разбивать скрытые куски.
Тормозит именно отображение. Сами по себе команды Fill и ReFill выполняются быстро. Большие таблицы, особенно одна, о которой я говорила выше, виснут при скроллинге. Я пробовала ставить вместо 5000 строк 3000, 1000, но все равно виснет. Не могу же я выводить 1000 страниц по 50 строк? Это смешно и не удобно. Я попробую сделать двойную буферизацию, как вы говорите, но проверить это смогу только во вторник, когда выйду на работу. А так навскидку что еще можно сделать, если это не поможет?
Непридуманные истории
- Почему большинство мужиков слабаки?95 ответов
- Двухлетний внук должен звонить бабушке каждый день перед сном?19 ответов
- Мужчина на первой встрече стал самоутверждаться за мой счёт106 ответов
- Можно ли назвать такого мужчину достойным?29 ответов
- Заступилась за ребенка и теперь не знаю, что делать?312 ответов
Гость
Тормозит именно отображение. Сами по себе команды Fill и ReFill выполняются быстро. Большие таблицы, особенно одна, о которой я говорила выше, виснут при скроллинге. Я пробовала ставить вместо 5000 строк 3000, 1000, но все равно виснет. Не могу же я выводить 1000 страниц по 50 строк? Это смешно и не удобно. Я попробую сделать двойную буферизацию, как вы говорите, но проверить это смогу только во вторник, когда выйду на работу. А так навскидку что еще можно сделать, если это не поможет?
Если Fill и Refill дешёвые, то везде советуют DoubleBuffer включить.
40 тысяч строк это не очень много, разве что на постоянное разбитие можно грешить. Если не поможет, то профайлить нужно, без этого не разобраться.
40 тысяч строк это не очень много, разве что на постоянное разбитие можно грешить. Если не поможет, то профайлить нужно, без этого не разобраться.
Гость
На шарпе не пишу, но по опыту работы с Qt, сталкивался с медленной отрисовкой таблицы из-за выравнивания строк и столбцов. Так что советую отключить выравнивание.
P.S.: почему-то весь текст и ссылку нельзя добавить. Удачи!
P.S.: почему-то весь текст и ссылку нельзя добавить. Удачи!
Гость
Вот
Гость
Я не программист, но вуман перестает быть томным. Скоро здесь нобелевские лауреаты начнут печататься и совещания правительств по ковид проходить...
Пысы. Слушаем песню Тыжпрограммист.
Пысы. Слушаем песню Тыжпрограммист.
Форум: Развлечения
Всего: 81 627 тем
Новые темы за все время: 81 627 тем
- Чем отличается крафтовое пиво от обычного?16 ответов
- Мой бывший, хоть и парень, но умел шить, причём весьма неплохо6 ответов
- Какие добрые фильмы, рассказы вы знаете?8 ответов
- Не могу остановиться и не смотреть "женский форум"4 ответа
- Женский форум3 ответа
- Что вкуснее в холодном виде, чем в горячем?29 ответов
- CS2 помоечая игра2 ответа
- Сериал похожий на твин пикс17 ответов
- Как вы относились к ночным клубам?18 ответов
- Набор начинающего повара. Что купить?16 ответов
Популярные темы за все время: 42 591 тема
- Любителям котов и прочих радостей198 331 ответ
- Рro Не балет60 848 ответов
- Возвращение в Россию после 5 лет в США57 718 ответов
- Свободным душой сюда !)))43 609 ответов
- а что вы помните из того, что уже ушло из современной жизни40 703 ответа
- Задержка путинского пособия.31 607 ответов
- Какую вы любите зиму, морозную или помягче?29 066 ответов
- Клуб довольных жизнью.27 108 ответов
- Как выращивать огурцы?18 101 ответ
- Ассоциации (игра)14 846 ответов
Следующая тема
Предыдущая тема