Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2

Модерирует : ShIvADeSt

ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы http://forum.ru-board.com/topic.cgi?forum=33&topic=3647&start=2020#lt
Внимание, все большие куски кода (более 5 строк) оформляем в тег [more] дабы уменьшить размер поста.

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:52 20-04-2006 | Исправлено: ShIvADeSt, 02:02 30-06-2006
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
EvSeKo
Сама по себе функция не такая уж и медленная. Идея в другом. Когда Вы пишете безобидную конструкцию SetLength(a,length(a)+1) за кулисами происходит очень "страшные вещи". Вначале выделяется кусок памяти необходимого размера (не дотачивается, а именно выделяется ещё один, хотя в некоторых случаях может быть запас места и Делфи воспользуется этим, к примеру TStringList, смотреть в сторону Capacity)Потом с старого копируется в новый и старый освобождается. Пока блоки памяти маленькие (по некоторым расчётом - до 4 кило) делфовский менеджер сравнительно быстро разруливает такие блоки, но когда счёт идёт на мегабайты.... (молчу)
Скорость. По моим замерам и некоторых других людей скорость доступа к элементам динамического масива против статического меньше в 2 - 3 раза.
 
Что же делать?
Менять идеологию. Вот пример
Неоптимальный код

Код:
 
var a:array of integer;
   i:integer;
begin
for i:=1 to 10000 do begin
  Setlength(a,i);
  a[i]:=i;
end;
 

Это же, но оптимально

Код:
 
var a:array of integer;
   i:integer;
begin
Setlength(a,10000);
for i:=1 to 10000 do begin
  a[i]:=i;
end;
 

Сразу скажу, что первый вариант будет иметь геометрическую зависимость скорость/кол.элемент, если не хуже, а второй - константное или близкое к этому.
Что делать, если нереально предположить, скоко элементов в массиве будет, то пользуемся правилом  "лучше  с излишком".
Но если и так не удоволетворяет, что делать?
Пользоваться системными функциями выделения памяти и использовать указатели или написать свой менеджер памяти. Но эта задача для прикладников часто "из области фантастики" - зачем для проги в 10 строк писать ещё 1000, что бы быстрей работало?
 
Хотя если есть необходимость, то можно покурить в сторону FastMem, в BSD2006 его говорят включили.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 19:12 03-05-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RostY

Цитата:
Calculated Field
где сделать? В Access? Не нашёл
 
 
 

Цитата:
OnCalcFields

выставил в свойстве ADOQuery.

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 20:02 03-05-2006
Barakuda7

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, ВСЕМ ПРИВЕТ!!!
Нужна помощь, нужно переделать Ansi (допустим Edit.Text) в PAnsiChar.
Это нужно для функции CopyFile, которая принимает только PAnsiChar в качестве имен файлов, а обычный OpenDialog выдает String значит Ansi.
Заранее спасибо.

Всего записей: 183 | Зарегистр. 20-03-2005 | Отправлено: 21:13 03-05-2006
EVD



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Barakuda7
PChar(Edit.Text)

Всего записей: 123 | Зарегистр. 22-12-2005 | Отправлено: 21:58 03-05-2006
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
PAnsiChar(Edit1.text) не пробывал?

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 21:58 03-05-2006
EVD



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
прям брейн-ринг какой-то
 
 
Кто-нибудь работал с JvRuntimeDesign из JEDI?
1. Как в нем создавать, например, кнопку с определенными координатами, а не указывая местоположение мышью?
2. Как в нем выделять несколько компонентов, как в Delphi? Выделяется только 1 компонент по клику мыши на нем.

Всего записей: 123 | Зарегистр. 22-12-2005 | Отправлено: 22:20 03-05-2006
EvSeKo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
Спасибо за разъяснение.
 
Ещё меня интересует такой вопрос.
Для распараллеливания вычислений я использую 2 потока. На моём компе с одноядерным процессором никакого выигрыша в скорости нет по сравнению с одним, т.к. с приоритетом Highest они выполняются поочерёдно.
Вот выдержки из кода:
 

Код:
 
...
for i:=0 to k-1 do potoki[i].Priority:=tpHighest;
...
for i:=0 to k-1 do potoki[i].Resume;
 

 
А будут ли потоки выполняться одновременно на двуядерном процессоре?

Всего записей: 68 | Зарегистр. 22-06-2005 | Отправлено: 03:51 04-05-2006
mutmut



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хотелось бы узнать как зделать вот такую вещицу.
Существует окно браузера в нем загружена страница с рисунком.
Как выдернуть из страници картинку? Если мы обратимся к картинке http://sdsd.ru/dfdf.jpg то будет уже другая картинка, а не та что подгрузилась в браузер.
 
Подскажите как это реализовать, а то я даже пока и не знаю с какой стороны подойти к этому вопросу.
 
Зарание Благодарен.

Всего записей: 46 | Зарегистр. 14-12-2005 | Отправлено: 07:10 04-05-2006
SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SZap
Разберись с терминологией. По стандарту master-detail - это когда есть справочник - одна таблица, а в другую пишутся значения из этого справочника. В одно поле. А у тебя аж 3. Какое писать-то будешь? Все 3 в одно затолкаешь?

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 08:56 04-05-2006
SZap



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergeBS
Может я не так выразился....
Попытаюсь по другому:
Есть две таблицы (t1-Master,t2-Detail) обе имеют общие поля (a(data), b(string), c(numeric)) по которым необходимо их связать.
Как с использованием Halcyon это можно реализовать?
При использовании tDBF все получается замечательно...

Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 09:20 04-05-2006
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip
делай не в акцесе, а в Дельфе:
имеешь открытый АДОДатаСет, или другой датасет, жмешь на нем правую кнопку - Филдс едитор - Адд алл филдс - добавит тебе все фоля которые физически есть в датасете, потом жмешь Нью Филд - задаешь имя, тип (type), FieldType: Calculated, жмешь Ок и пишешь обработчик ОнкалкФилдс.

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 09:34 04-05-2006
SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SZap

Цитата:
обе имеют общие поля (a(data), b(string), c(numeric)) по которым необходимо их связать.  

Не должно такого быть. Топай на DelphiKingdom, читай статью Тенцера "Естественные ключи против искусственных". После чего избавляйся от дублирования полей. У тебя в результате должно получиться одно ключевое поле в каждой таблице. В одной будет primary, во второй foreign. Или вообще связка типа dblookupfields. Т.е. в одной таблице - уникальный ключ и поле так сказать смысловое (например код улицы - название улицы), а в другой - только значения ключей из первой (например про жителей - храним коды улиц, на которых они живут). Halcyon тут не при чем.
 

Цитата:
При использовании tDBF все получается замечательно...

Тем хуже для tDbf. Раз он ошибки проектирования прячет.
 
Короче либо из справочника 2 поля уйдут и добавится ключ, либо этот справочник развалится на 3, и в каждом из 3 будет ключ и расшифровка.

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 10:32 04-05-2006
SZap



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergeBS
Наверное правильно будет начать с того, что структура исходных таблиц стандартизирована. На их структуру я повлиять не могу. А технология мастер-детаил, на мой взгляд, может (и даже должна) иметь возможность связывать таблицы по нескольким полям. По крайней мере, штатное програмное обеспечение для заполнения этих таблиц написанное на Clipper работает замечательно. Более того, мне не понятен смысл добавления некого дополнительного эксклюзивного ключевого поля в таблицу если в ней и так уже существует набор полей, значения которых неповторяются (одновременно всех).
Попытаюсь привести пример:
  таблица1 (t1) - счета
  таблица2 (t2) - список товаров в счетах
  связь происходит по полям: НомерСчета, ДатаСчета
 
Если я правильно понял, то у мня не получится это сделать с помощью Halcyona?

Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 11:16 04-05-2006
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mutmut
видимо, никак. даже браузеры картинку скачивают заново, если им указываешь "сохранить изображение." во всяком случае, в интерфесе IHTMLImgElement никаких возможностей для этого нет. поиск по рунету показал, что проблема общая и нигде четкого решения нет.
 

вообще, по ходу поиска наткнулся...
http://www.soft32.ru/delphi.shtml
на большинство стандартных вопросов там есть ответы. это всем.

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 13:07 04-05-2006 | Исправлено: Sleepwalker, 13:08 04-05-2006
SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SZap

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

Статью ты точно не прочитал, а зря. Поскольку именно из-за отсутствия такого поля у публики и появляются проблемы. Как у тебя, например. И именно поэтому я естественных ключей не применяю вообще. Во избежание проблем.  
 

Цитата:
написанное на Clipper работает замечательно

Кто тебе сказал, что в Clipper - мастер-детайл? Я поставлю фильтр на 2 таблицу по данным первой - и все. Кстати в Halcyon я именно этим финтом пользуюсь, если  DBLookup неудобен.
Дальше: строковое поле в качестве связки - мягко говоря оригинально. Особенно если оно где-нибудь с(15) и больше. В такую сказку я просто НЕ ВЕРЮ.

Цитата:
 
 Если я правильно понял, то у мня не получится это сделать с помощью Halcyona?
 

Не знаю. Не могу вспомнить, делал ли я в Halcyon связку больше чем по 1 полю. А в том что сейчас делаю - вообще связок и индексов (пока) нет. DbLookup-ы. Индексы появятся, чтобы порядок просмотра задавать. Специфика такая.
 

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 13:52 04-05-2006
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
EvSeKo

Цитата:
т.к. с приоритетом Highest они выполняются поочерёдно

Без особой необходимости указывать высокий приоритет не стоит. Ту и в операционки могут проблемы начаться (особенно, если RealTime поставить)

Цитата:
А будут ли потоки выполняться одновременно на двуядерном процессоре?

А это уже как решит операционная система. Правда ей можно дать указания, как распаралеливать твои потоки по процессорам. Но 9х с двухпроцессорными кажеться неработают совсем.  
2000 - нормально работает с 2 процессорами
ХР - вроде с 4.
Но на двухпроцессорной системе ты никогда не получишь двукратного прироста. Максимум 1.5-1.7, и то, при правильном проектировании. Почему? Потоки обращаются к одной и той же оперативной памяти, а в твоём случае (вспоминаю про SetLength) наверное очень активно. Но память то общая. Поэтому, пока один процес пишет в память, то другому будет заблокирован доступ к памяти. Некоторые умные материнские платы могут разруливать оптимально эти ситуации (например, если блоки не пересекаются, то запись можно разрешить обоим).
Поэтому, если твои потоки используют большие обёмы памяти, то выиграша ты не получиш. В лучшем случае будет просто работать как и на одном процесоре.
 
Но есть выход. Можно воспользоваться кешем процессора. Если объём данных для обработки мал, то он может поместиться в кеше и как следствия производительность поднимается в несколько раз. В общем это очень тонкая вещь. Один очень хороший человек по имени Крис Касперски (не путать с антивирусом) пишет очень класные статьи. Также у него есть и на эту тему. Вот здесь http://kpnc.opennet.ru/. Скачай и почитай. Не пожалееш.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 14:01 04-05-2006
SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker

Цитата:
 вообще, по ходу поиска наткнулся...
http://www.soft32.ru/delphi.shtml  

Чудак-человек. Там же внизу ссылка, откуда это надергано. Причем в оригинале (DelphiWorld) - горааздо больше. Больше 5000 статей.  И спецоболочка для удобства навигации. Весьма удобно.

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 14:09 04-05-2006
MetFan

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня такой вопрос: Имеется форма на ней одна кнопка и один эдит. Как сделать так чтобы после нажатия кнопки на форме строился график функции записанной в эдите? (не знаю как произвести правильное чтение из эдита).

Всего записей: 5 | Зарегистр. 04-05-2006 | Отправлено: 16:01 04-05-2006
mutmut



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker
Не совсем так. Если я делаю сохранить на картинке в браузере то он берет именно эту картинку(скорей всего из кеша). Можно сделать эти действия програмно но как то блин это не красиво Хотелось бы как то по иному...

Всего записей: 46 | Зарегистр. 14-12-2005 | Отправлено: 16:28 04-05-2006
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MetFan
Тебе нужно что-то типа парсера-интерпритатора формул (компонент, или юнит), который по формуле вычислял бы значение. У меня валяется какой-то TZmathedit (1998 года выпуска), думаю можешь найти что-то поновее.
кусочек описания:
 
TZMathedit component : install z_parser.pas as usual and it will appear on samples palet page
usage = same as TEdit with additional public property :
 
TextValue:string; yields the numerical result of expression in Text, or the errormessage.
Example :  
  drop a TZmathedit on the Form with a Tlabel, put in the onchange eventhandler :
  label1.caption:=Zmathedit1.textvalue;
  , see the parsing in action while you type (in IDE, put break on exception off)
 
Or when you want to use the numerical result, you do NOT need the component.
In fact, the component is only a demo of the more flexible non-class functions :
 
EvaluateToFloat(s0:string):extended;     yields result as a float, use together with
GetEvaluationError:string;  returns errormessage, or emptystring if result was valid
Example
   value:=EvaluateToFloat('sqrt(0.5*exp(x)-0.5*exp(y))');
   if GetEvaluationError<>'' then label1.caption:=GetEvaluationError;
 
define parameters x/y/z as Parameter.x:= ...     etc.
 
Additional notes
Those who like hyperbolic-/error-/gamma-functions (and so on), can easily expand the available  
functions by adding them in the indicated location in the source code.  
 
Вычисляеш функцию и рисуешь график в каком-то чарте.
 
Добавлено:
посмотрел - есть даже демошка с графиками (даже 3Д). Могу намылить. Пиши в ПМ
 
Добавлено:
и здесь можеш посмотреть: _http://www.freedownloadscenter.com/Business/Accounting_Tools/Magic_Graph.html

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 16:58 04-05-2006
   

Страницы: 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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2
ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru