Программисты зайдите
Я работаю экономистом, но для облегчения работы прибегаю к помощи программирования. Раньше я писала макросы на 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
-
Алексей СемкоПерсональный тренер,...5 ответов -
Елена ДробышеваКризисный психолог14 ответов -
Елизавета ПолетПсихолог5 030 -
Максим ХолизмПрактикующий психолог1 184 -
Яковенко ДанилПсихолог11 ответов -
Светлана ТатьяненкоПсихолог17 ответов -
Золотых Вера ВладимировнаПсихолог199 ответов -
Абрамов СергейПсихолог314 ответов -
Екатерина МетляеваПсихолог111 ответов -
Кулик Елена БорисовнаСемейный психолог10 ответов
Гость
Навскидку: если тормозит само отображение, можно сделать вот так:
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 строк? Это смешно и не удобно. Я попробую сделать двойную буферизацию, как вы говорите, но проверить это смогу только во вторник, когда выйду на работу. А так навскидку что еще можно сделать, если это не поможет?
Гость
Тормозит именно отображение. Сами по себе команды Fill и ReFill выполняются быстро. Большие таблицы, особенно одна, о которой я говорила выше, виснут при скроллинге. Я пробовала ставить вместо 5000 строк 3000, 1000, но все равно виснет. Не могу же я выводить 1000 страниц по 50 строк? Это смешно и не удобно. Я попробую сделать двойную буферизацию, как вы говорите, но проверить это смогу только во вторник, когда выйду на работу. А так навскидку что еще можно сделать, если это не поможет?
Если Fill и Refill дешёвые, то везде советуют DoubleBuffer включить.
40 тысяч строк это не очень много, разве что на постоянное разбитие можно грешить. Если не поможет, то профайлить нужно, без этого не разобраться.
40 тысяч строк это не очень много, разве что на постоянное разбитие можно грешить. Если не поможет, то профайлить нужно, без этого не разобраться.
Гость
На шарпе не пишу, но по опыту работы с Qt, сталкивался с медленной отрисовкой таблицы из-за выравнивания строк и столбцов. Так что советую отключить выравнивание.
P.S.: почему-то весь текст и ссылку нельзя добавить. Удачи!
P.S.: почему-то весь текст и ссылку нельзя добавить. Удачи!
Гость
Вот
Гость
Я не программист, но вуман перестает быть томным. Скоро здесь нобелевские лауреаты начнут печататься и совещания правительств по ковид проходить...
Пысы. Слушаем песню Тыжпрограммист.
Пысы. Слушаем песню Тыжпрограммист.
Форум: Развлечения
Всего: 80 580 тем
Новые темы за все время: 80 580 тем
- Какие добрые фильмы, рассказы вы знаете?7 ответов
- Не могу остановиться и не смотреть "женский форум"3 ответа
- Женский форум3 ответа
- Что вкуснее в холодном виде, чем в горячем?29 ответов
- CS2 помоечая игра2 ответа
- Сериал похожий на твин пикс16 ответов
- Как вы относились к ночным клубам?15 ответов
- Набор начинающего повара. Что купить?16 ответов
- Есть тут такие, кто каждые выходные тусит в клубе?7 ответов
- Где можно прокатиться в паланкине?3 ответа
Популярные темы за все время: 42 232 темы
- Любителям котов и прочих радостей198 332 ответа
- Рro Не балет60 626 ответов
- Возвращение в Россию после 5 лет в США57 675 ответов
- Свободным душой сюда !)))43 609 ответов
- а что вы помните из того, что уже ушло из современной жизни40 704 ответа
- Задержка путинского пособия.31 607 ответов
- Какую вы любите зиму, морозную или помягче?29 067 ответов
- Клуб довольных жизнью.27 108 ответов
- Как выращивать огурцы?18 102 ответа
- Ассоциации (игра)14 847 ответов
Следующая тема
Предыдущая тема