Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» прикладное программирование и не только оно...

Автор: ShIvADeSt
Дата сообщения: 16.12.2010 09:22
Arnaud

Цитата:
Нельзя ли по-конкретнее насчёт

Названия не скажу, так как уже давно в чемпах не участвую, но в свое время видел несколько (названий не помню). Но думаю гугль все помнит и знает.
Автор: brookson
Дата сообщения: 23.01.2011 19:31
Доброго всем времени суток!
Помогите решить проблему с памятью. Прочитал и перепробовал кучу вариантов, ничего пока не помогло.

Есть оконное приложение. Когда запускается главное окно, программа занимает не более 12 Мб. Когда из него открыть другое окно, памяти уже 14Мб. Если его закрыть (даже ничего не делая), отдаётся обратно килобайт 200-300.
И так каждый раз - открытие забирает от одного и более (2, 3, 4 Мб), а отдаётся обратно при закрытии пару сот кб.

Датасеты в основном хранятся в датамодуле. Некоторые и на формах.
На закрытие формы закрываю ненужные датасеты и делаю Form.DoDestroy
Если в закрытии добавить как рекомендуют Action:=caFree, то после второго открытия-закрытия возникает ошибка нарушения доступа. Удаление датасетов, которые на форме, тоже вызывает такую же ошибку.
Но если пользователь за день пару окон закроет-откроет, программу приходится перезапускать.

Добавлено:
Забыл добавить. Делфи 2006, доступ к данным - Interbase. FastMM - молчит.
Автор: ShIvADeSt
Дата сообщения: 24.01.2011 00:58
brookson
caFree ИМХО юзать только когда делаешь Create каждый раз при показе. Ошибки судя по всему как раз поэтому и идут. Почитай про динамическое создание окон, то есть окно создается только тогда, когда его собираешься показать, когда не нужно - уничтожаешь его. Не обращай внимания на то сколько освободилось, вся память не освободится (хз почему), проверялось на чистом АПИ, аналогичная проблема - туда сюда килобайты гуляют. В случае с ВЦЛ спокойно может плюс минус метр.
Автор: brookson
Дата сообщения: 24.01.2011 09:39
ShIvADeSt
Сделал так. На главной форме теперь Applacation.Create(...); Form.showModal; Form.Free

Ошибки больше нет. Но и эффекта тоже.
Пробовал даже из события формы OnCreate, OnShow просто убрать открытия всех датасетов. Всё равно прибавляет в память 2-3 метра, а отдаёт 100кб.


Добавлено:
Беда в том, что если я на форме добавляю новую запись, или из неё еще форму открываю и т.д., то память уходит ещё быстрее ((
По логике всё, что на форме, включая датасеты, должно удалиться из памяти вместе с ней.
Автор: tanaseduard
Дата сообщения: 24.01.2011 09:52
brookson

Попробуй метод FreeAndNil(Var Obj).
Автор: brookson
Дата сообщения: 24.01.2011 11:27
tanaseduard
я бы сказал, что ничего не изменилось
Автор: tanaseduard
Дата сообщения: 24.01.2011 11:33
brookson
Через часик попробую сделать посмотрю.

Создать форму, показать, поработать в ней и убить?
И посмотреть сколько ресурсов в дельте получилось?
Автор: brookson
Дата сообщения: 24.01.2011 11:34
придумал вот что.
для тех форм, которые часто нужны. перед созданием проверяю, не создана ли уже форма. если создана, то просто открываю.
на закрытие не уничтожаю.
тогда один раз память отжирается, но при последующем запуске память остаётся на том же уровне (не прибавляется каждый раз).
посмотрим, как будет на практике

Добавлено:
tanaseduard
да. форма открывает там разные наборы данных и т.д. (довольно много всего на ней)
Автор: tanaseduard
Дата сообщения: 24.01.2011 11:40
brookson

Очень грамотное решение.
Например у нас в проекте более 2000 форм(почти все в dll и dpl).
На старте загружается только лоадер. Далее при запросе на форму проверяем или она уже создана, если нет создаем. После выхода дестроим ну или если не требуется то оставляем жить, так же при старте проверяем или имеет право эта форма находиться в памяти если нет, то мы ее дестроим и пересоздаем.
На практике работает очень хорошо.

Добавлено:
brookson
Итак, итоги теста.


Выводы делайте сами.

Как итог сторонние компоненты в особенности GUI оставляют мусор в памяти.
В данном примере использовался DevExpress QuantumGrid v 6.54.


Добавлено:
tanaseduard

Создавал так:

Код: Form2:=TFrom2.Create(Form1)
Автор: brookson
Дата сообщения: 24.01.2011 13:23
tanaseduard
Да, у меня получилось так же. Вполне приемлемо.
Один вопрос:
Цитата:
так же при старте проверяем или имеет право эта форма находиться в памяти если нет

Это как? или это просто о реализации прав доступа пользователей?
Автор: tanaseduard
Дата сообщения: 24.01.2011 13:31
brookson

Это о реализации прав доступа и загрузки динамических модулей в проект(как они грузятся и на что имеют права).
Автор: delover
Дата сообщения: 24.01.2011 14:53
IntelliJ Idea - красивая обла для джавы. От вижуал студии отличается интерфейсом и может некоторой нудностью к путям. Но работает достаточно круто если смотреть в сторону Джавы. В общем мне понравилась но фанатом не стал - не люблю писать вирусы.


Добавлено:
Ой читал первую страницу...
Автор: akaGM
Дата сообщения: 24.01.2011 15:37
delover

Цитата:
Ой читал первую страницу...

и что?
Автор: ShIvADeSt
Дата сообщения: 26.01.2011 01:10
akaGM

Цитата:
и что?

А там как раз это обсуждалось, правда года два назад
Автор: akaGM
Дата сообщения: 26.01.2011 01:31
ShIvADeSt
точно, я же сам и спрашивал
склероз, однако...
Автор: XPEHOMETP
Дата сообщения: 26.01.2011 10:33
По поводу первого программиста, забаненная (вполне справедливо) тема в общем топике. Которую именно сюда некоторые граждане (тоже вполне справедливо) хотели перенаправить. Типа, ответ на гневные замечания от Qraizer. Я, в реальности, не искажал никакие фамилии. Lovelace - это обычная аглицкая фамилия. Более чем реальная. Вроде как у нас Онегин, Печерин или матрос Швандя. Сейчас ее принято произносить в соответствии с аглицким прононсом, Лавлейс. Но некогда она, попав в литературу, на Руси произносилась часто как "Ловелас". А иногда - несколько иначе. Саня Пушкин будет мне в свидетели:

Цитата:
Она любила Ричардсона
Не потому, чтобы прочла,
Не потому, чтоб Грандисона
Она Ловласу предпочла

- Женя Онегин.
Ну, транскрипция иноземных фамилий - дело темное. Куда более темное, чем программирование. Варианты вполне реальны.

ЗЫ: Ну, к тому же. Деревянные аналоги "Феликсов" начала 20-го века в веке 19 абсолютно немыслимы и практически не реализуемы из-за малой прочности дерева. Бред полнейший, с практической точки зрения. Бронза или латунь еще спасут отца русской программной демократии... Хотя ему это уже не по карману будет, явно, в 19 веке...
Автор: Qraizer
Дата сообщения: 28.01.2011 06:35

Цитата:
Lovelace - это обычная аглицкая фамилия. Более чем реальная. ... Сейчас ее принято произносить в соответствии с аглицким прононсом, Лавлейс. Но некогда она, попав в литературу, на Руси произносилась часто как "Ловелас".
Только произносится иначе, ... потому что в Русь она вошла с французского.
Если у тебя такой юмор был, мягко говоря... сорри, не получается мягко. Попробуй-ка на бумаге "всего лишь" написать вычисление чисел Бернулли в машкодах для хотя бы Ай-Би-Эм... тьфу ты, x86, у которого набор инструкций... гм... мягко говоря, несравним даже с ЭНИАКом, не то что с разностной машиной Бэббиджа. Предположим, что у неё тоже был некий поцессор с неким набором инструкций, угу.
Автор: delover
Дата сообщения: 01.02.2011 06:40
XPEHOMETP
Qraizer
Вы не дооценили тему вообще и я расстроен. Вполне понятно что Вождь Компартии не первый программист а первый русский программист. Его нельзя хоронить потому что это УФО (НЛО) вселенского масштаба которое всё же ездило во Францию. Батюшка Церковный меня успокоил - его земля не примет. И не надо! К сожалению Ловеласом он не был, а я люблю девочек. Мне вообще не понятно зачем им голова - вроде есть, а вроде нет. Непонятные существа девочки - вообще загадочные. Вот и чтобы доказать превосходство существования головы нужен Вождь Всех Народов. Иначе девки не поверят.
Автор: akaGM
Дата сообщения: 01.02.2011 07:04
"ну, вы, блин, даёте"...
Автор: XPEHOMETP
Дата сообщения: 01.02.2011 08:56
delover

Цитата:
Вполне понятно что Вождь Компартии не первый программист а первый русский программист.

He! Первый русский программист - это великий князь Иван III Васильевич. Ибо ставил перед собой как реальную практически невыполнимую задачу: отбить Константинополь у турок. И эта поганая программа действий так и висела над Российской Империей (люди добрые, мы - люди нездешние, отдайте нам Константинополь и проливы!), пока она доблестно не загнулась. А большевики как раз от этой невыполнимой программы отказались, выдвинули свою, не менее невыполнимую. Ну, программисты, что с них взять!

Qraizer
Да, пардон, не просек, что тогда языков более-менее высокого уровня (ну, тут каждый понимает по-своему, плюсовики тут фигни наговорили) не было, тем более что работы мадам Лавлейс не читал. Да и вряд ли она сейчас доступна. Так что - да, машинные коды. А это не сахар. Сейчас так никто не программирует, но, будучи студентом, видел великовозрастных тетенек (почему-то был отбор по половому признаку?) с курсов повышения квалификации, которые писали свои программы в машинных кодах для ЕС ЭВМ, через нолики и единички. Я на них смотрел как на ненормальных. Кому же надо такой фигней заниматься?

И еще раз - на счет фамилии. Как бы она в русский язык (скорее, в русскую культуру) не попала, это не важно, наверняка разными путями, но если бы Вы на меня за "Ловелас" не взъелись, я был бы не прав. А так, я понимаю, что Лавлейс и Ловелас - это одна и та же фамилия, и Вы это прекрасно понимаете. И показали это своей реакцией.
Автор: ShIvADeSt
Дата сообщения: 01.02.2011 10:37
Тогда продолжим поиск истины...
Первым был Адам, который надкусил яблоко , в итоге на Адама повелась Ева, так как у него было надкусанное яблоко. С тех пор все особи женского пола ведутся на тех, у кого есть надкусанное яблоко (и себе такое же хотят).
Автор: XPEHOMETP
Дата сообщения: 01.02.2011 10:45
ShIvADeSt
Ет чо, намек на гегемонию "Apple"? Нет уж, фигушки, IBM была еще раньше, когда яблоко было еще целым и некусанным!
Автор: ShIvADeSt
Дата сообщения: 01.02.2011 11:14
XPEHOMETP

Цитата:
Ет чо, намек на гегемонию "Apple"? Нет уж, фигушки, IBM была еще раньше, когда яблоко было еще целым и некусанным!

неа - это просто придумал. А то что девочки до опред возраста фанатеют от тех, у кого яблофон - это реальность.
Автор: delover
Дата сообщения: 01.02.2011 17:15
XPEHOMETP
Тут я прошу не путать "интуитивное" программирование Ивана Васильевича взирающего на баклажанную икру, с человеком который писал "Программу Партии". И заметьте господа ему для этого не нужен был ни Эпл ни Макинтош ни Роботрон с кисточкой. Лёгким почерком пера он настрогал "полное собрание сочинений Ленина"! Это чуть ли не 60 томов. Теперь берём компьютер с тактовой частотой - современная машинка и начинаем тупо сканнировать книги. Сколько уйдёт времени? А сколько уйдёт времени у компика перевести эту литературу на язык Французов - поборников дипломатии? Я боюсь что бедные французы никогда в жизни не прочитают ни строчки - компьютеры зависнут. Я уважаю компанию Лингво, но мне кажется Википедия намного меньше написала... Такой геморой осилит солидный институт не менее чем за год. А кого вы тогда девачкам покажете? Типа у меня комп дохлый, а человека который это доказал закопали. Не гоже.

Ловелайс... Замечательное имя у девушки. И то что она стала программистом - это не удивительно. Её вклад трудно оспорить но, Дон Хуан мне объяснил что такое женщины. Он писал приблизительно следующее - "это существа у которых есть дополнительное отверстие через которое они получают энергию мира"! После этого я чуствую себя ущербным тем более что настоящих программистов хоронят заживо. Ленин жил, Ленин жив, Ленин будет жить.
Автор: DemonWather
Дата сообщения: 01.03.2011 10:39
У меня уехала крыша)

Индусы пишут на php:

$b = ($count == 5 or $count == 4);

Народ!? Что это значит!? подскажите!
Автор: akaGM
Дата сообщения: 01.03.2011 10:49
DemonWather
да это на любом современном процедурном языке означает одно и тоже:

"присвоить переменной $b логическое значение 1, если переменная $count равна 5 ИЛИ 4,
присвоить 0 в противном случае"

в ПыХаПы все переменные начинаются с символа $
Автор: ShIvADeSt
Дата сообщения: 01.03.2011 11:08
А если бы было написано на дельфи
var
b:boolean;


b:=((count = 5) or (count = 4));

тогда сразу было бы понятно, что имел ввиду автор. (я про то что из типа b становится понятно, как трактовать это выражение).
Автор: akaGM
Дата сообщения: 01.03.2011 11:44
пусть скажет спасибо, что индусы ещё на Сях не зафигачили...
было бы еще понятнее...

b = ((count==5) || (count==4)) ? 1 : 0

как я всегда люблю говорить в этом случае:

2b | !2b

:)
Автор: karakurt2
Дата сообщения: 01.03.2011 18:00
просьба к фрилансерам. если не затруднит, дайте пример какого-нибудь техзадания на разработку программного обеспечения. как вы считаете, на что следует равняться. вариант как можно более близкий к идеальному.
Автор: mrlika
Дата сообщения: 02.03.2011 22:01
karakurt2

Забей "пример техзадания на разработку" в гугл. Там этого полно...

Страницы: 12345678910111213141516171819202122232425262728293031

Предыдущая тема: Borland Developer Studio 2006 и Oracle пакеты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.