小编lke*_*ler的帖子

如何在Delphi中以各种方式选择线程?

看来我终于要在我的Delphi 2009程序中实现某种线程.如果只有一种方法可以做到这一点,我就会开始跑步.但我看到了几种可能性.

任何人都可以解释这些之间的差异以及为什么我选择一个而不是另一个.

  1. Delphi中的TThread类

  2. AsyncCalls安德烈亚斯Hausladen

  3. OmniThreadLibrary by Primoz Gabrijelcic(gabr)

  4. ......还有其他人吗?


编辑:

我刚读了Gabr在2010年3月(第10期)Blaise Pascal杂志上发表的一篇精彩文章,名为"创造线索的四种方法".你必须订阅获取杂志的内容,所以根据版权,我不能在这里重现任何实质性的内容.

总之,Gabr描述了使用TThreads,直接Windows API调用,Andy的AsyncCalls和他自己的OmniThreadLibrary之间的区别.他的结论是:

"我不是说你必须选择除了经典的德尔福方式(TThread)以外的任何东西,但是你知道你拥有的选择仍然很好"

Mghie的答案非常透彻,暗示OmniThreadLibrary可能更可取.但是我仍然对每个人关于我(或任何人)应该如何为他们的应用选择他们的线程方法的意见感兴趣.

您可以添加到列表中:

.4.直接调用Windows API

.5. 米莎Charrett的 CSI分布式应用程序框架,通过LachlanG在答复建议.


结论:

我可能会选择OmniThreadLibrary.我喜欢加布尔的作品.我多年前使用过他的探查器GPProfile,而我现在正在使用他的GPStringHash,它实际上是OTL的一部分.

一旦Embarcadero将该功能添加到Delphi中,我唯一关心的可能就是升级它以使用64位或Unix/Mac处理.

delphi multithreading asynchronous

63
推荐指数
4
解决办法
6698
查看次数

适用于Delphi的Profiler和内存分析工具

我最近从Delphi 4升级到Delphi 2009.使用Delphi 4,我一直使用Primoz Gabrijelcic的GpProfile作为分析器,使用Turbo Power的Memory Sleuth进行内存分析和泄漏调试.两者都适合我.但我现在需要能够与Delphi 2009配合使用的新工具.

对于Delphi的分析/分析工具的领导者显然是AutomatedQA的AQTime.他们最近甚至吞噬了Atanas Soyanov的Memproof,据我所知这是一款出色的免费记忆分析工具,并将其功能融入AQTime.但AQTime对于个人程序员来说非常昂贵.它实际上比升级到Delphi 2009成本更高!

所以我的问题是:是否还有其他较便宜的选项可以在当前版本的Delphi中进行性能分析和内存分析,您对此感到满意并推荐,或者我应该咬紧牙关并为AQTime付出巨额代价?


Addenum:似乎早期的回答者表明已经包含在Delphi中的FastMM管理器非常适合发现内存泄漏.

那么,源代码分析有什么好的选择吗?

我很好奇的是Michael Adolph的ProDelphi,它不到AQTime成本的六分之一.你用它吗?AQTime值六倍的价值吗?


Addenum 2:我下载了AQTime和ProDelphi的试用版.

AQTime起初有点压倒性,有点令人困惑.花了几个小时才找到了解决它所需的一些技巧.

ProDelphi非常像我习惯的GpProfile.但是它的窗户混乱而且令人困惑,而且它不如GpProfile那么好.

对我来说,差异似乎是:

  1. ProDelphi会更改您的代码.AQTime没有.如果出现问题,更改代码可能会损坏您的数据,但我对GpProfile的体验是它从未发生在我身上.加一个AQTime.

  2. ProDelphi要求您关闭优化.但是你想要描述的是你的程序,它的优化程度,运行方式.加一个AQTime.

  3. ProDelphi只能剖析功能或程序.AQTime可以归结为单独的线路.AQTime加2.

  4. ProDelphi有一个免费版本,可以分析20个例程,其专业版本的成本不到100美元.AQTime是600美元.ProDelphi加4.

目前比分是4-4.你怎么看?


Addenum 3:Primoz Gabrijelcic计划让GpProfile再次运作.请参阅他对以下一些回复的评论.他在StackOverflow上饰演Gabr.


Addenum 4:看起来似乎可能有一个分析器解决方案.参见Andre的开源asmprofiler,如下所述.

delphi profiling memory-leaks

54
推荐指数
4
解决办法
3万
查看次数

如何获取Delphi程序使用的内存

我知道如何使用GlobalMemoryStatusEx获取系统内存,但这告诉我整个操作系统正在使用的内容.

我真的希望我的程序能够报告它单独分配和使用的内存量.

我的Delphi 2009程序中是否有任何方法可以调用Windows函数或某些FastMM函数来查找我的程序单独分配的内存?


重新审视我的问题,我现在已经通过@apenwarr更改了我对GetMemoryManagerState答案的接受答案.它产生了与我以前使用的GetHeapStatus函数(现已弃用)相同的结果,而GetProcessMemoryInfo.WorkingSetSize给出了非常不同的结果.

delphi memory-management fastmm

46
推荐指数
2
解决办法
3万
查看次数

为什么Delphi程序员会使用Lazarus作为IDE而不是使用Delphi的IDE?

我对用Delphi编程的Delphi IDE非常满意.

但我听说过Lazarus编程环境,我也听说有些Delphi程序员使用它而不是Delphi IDE.

Lazarus相对于Delphi IDE有什么优势,以及Delphi程序员为什么或者应该切换到它?


答案给我留下了比以前更多的问题.关于Lazarus是否能够或不能用作开发Delphi代码的编辑器似乎存在一些分歧.我想我认为你可以把所有内容留在Delphi中,只需更改IDE.Lazarus Wiki的Lazarus for Delphi用户部分说:

转换Delphi项目时要做的第一件事
打开Lazarus之后,你应该转到Tools,然后转换Delphi项目到Lazarus项目.这不会为你做任何事情,但仍然会带给你许多方面.请注意,Lazarus IDE的转换工具通常是单向转换.如果您需要保留Delphi兼容性,以便可以使用Delphi和Lazarus编译项目,请考虑使用XDev Toolkit转换文件.

因为Lazarus是免费的并不是转换的理由,但是不会因为切换你的物理$而惩罚你.(你仍然需要投入时间来转换和学习.时间= $).

关于为什么有人可能会从Delphi切换到Lazarus的答案,我的理解结论很明显:显然它必须提供Delphi目前无法提供的东西.目前,这是多平台支持,可能还有64位支持.Delphi曾经有过Kylix,但不支持Mac.

但是,随着Embarcadero很快就承诺了64位和64位,你已经回答了我的问题,告诉我没有理由(至少对我来说)切换.

ide delphi lazarus

44
推荐指数
10
解决办法
4万
查看次数

一种良好而简单的随机性度量

采用长整数序列(比如说100,000个)的最佳算法是什么,并返回序列随机性的测量值?

该函数应返回单个结果,如果序列不是全部随机,则为0,如果完全随机则为1.如果序列有些随机,它可以在中间给出一些东西,例如0.95可能是一个合理的随机序列,而0.50可能有一些非随机部分和一些随机部分.

如果我将Pi的前100,000个数字传递给函数,它应该给出一个非常接近1的数字.如果我将序列1,2,... 100,000传递给它,它应该返回0.

通过这种方式,我可以轻松获取30个数字序列,识别每个数字的随机性,并返回有关其相对随机性的信息.

有这样的动物吗?

random algorithm

38
推荐指数
5
解决办法
2万
查看次数

当BOM(字节顺序标记)丢失时,如何最好地猜测编码?

我的程序必须读取使用各种编码的文件.它们可以是ANSI,UTF-8或UTF-16(大或小端).

当BOM(字节顺序标记)出现时,我没有问题.我知道文件是UTF-8还是UTF-16 BE或LE.

我想假设没有BOM文件是ANSI.但我发现我正在处理的文件经常缺少BOM.因此,没有BOM可能意味着该文件是ANSI,UTF-8,UTF-16 BE或LE.

当文件没有BOM时,扫描某些文件并最准确地猜测编码类型的最佳方法是什么?如果文件是ANSI,我希望接近100%的时间,如果是UTF格式,我希望接近100.

我正在寻找一种通用的算法来确定这一点.但实际上我使用Delphi 2009,它知道Unicode并且有一个TEncoding类,所以特定的东西将是一个奖励.


回答:

ShreevatsaR的回答让我在Google上搜索"通用编码检测器delphi",这让我感到惊讶,因为这个帖子在活着只有大约45分钟后被列为#1位置!这是快速googlebotting !! 同样令人惊讶的是Stackoverflow如此迅速地进入第一名.

Google的第二个条目是Fred Eaker关于字符编码检测的博客文章,列出了各种语言的算法.

我发现在该页面上提到了Delphi,它让我直接进入SourceForge的Free OpenSource ChsDet Charset Detector,这是用Delphi编写的,基于Mozilla的i18n组件.

太棒了!谢谢所有回复的人(全+1),谢谢ShreevatsaR,再次感谢Stackoverflow,帮助我在不到一个小时内找到答案!

delphi algorithm encoding byte-order-mark delphi-2009

29
推荐指数
2
解决办法
8026
查看次数

简单的更改为您的Delphi程序带来了最大的改进

我有一个Delphi 2009程序,它处理大量数据,需要尽可能快,不要使用太多内存.

您通过显着减少执行时间或内存使用对Delphi代码进行了哪些小的简单更改,这些更改对程序的性能影响最大?


谢谢大家的所有答案.很多很棒的提示.

为了完整起见,我将发布一些关于Delphi优化的重要文章.

在开始在About.com上优化Delphi代码之前

速度和大小: About.com 上的十大技巧

高性能Delphi中的代码优化基础Delphi优化指南,与Delphi 7相关但仍然非常相关.

memory delphi performance

28
推荐指数
13
解决办法
7726
查看次数

小内存泄漏是否重要?

现在所有PC上的RAM通常都在千兆字节,我是否应该花时间寻找可能在我的程序中的所有小的(不增长的)内存泄漏?我说的是那些可能小于64字节的漏洞,甚至是一堆只有4字节的漏洞.

其中一些很难识别,因为它们不在我自己的代码中,但可能在第三方代码或开发工具的代码中,我甚至可能无法直接访问源代码.在这些情况下,它将涉及与这些产品的供应商进行长时间的沟通.

我在SO上看到了第一个内存泄漏问题:内存泄漏是否正常?而目前排名第一的答案是:现在投了85次,是:不.

但在这里,我谈的是小泄漏,可能需要进行大量的调试,研究和沟通才能追踪.

我只谈论一个简单的桌面应用程序.我知道在服务器上运行的应用程序必须尽可能紧密.

所以我真正要问的问题是,如果我知道我有一个泄漏的程序,每次运行时说40个字节,那有关系吗?

单滴!http://www.beholdgenealogy.com/img/single_drip.jpg


另请参阅我的后续问题:哪些操作系统会释放内存泄漏?


后记:我刚刚为我的程序开发购买了EurekaLog.

我发现 EurekaLog的作者Alexander(他应该知道这些事情)的一篇优秀文章,关于捕获内存泄漏.在那篇文章中,亚历山大非常简洁地陈述了我的问题的答案:

虽然应用程序中的任何错误总是很糟糕,但是存在一些错误类型,这些错误在某些环境中是不可见的.例如,内存或资源泄漏错误在客户端计算机上相对无害,并且可能在服务器上致命.

memory-leaks

27
推荐指数
7
解决办法
3740
查看次数

PHP/mySQL中类似Google的搜索引擎

我们已经删除了数千页的报纸文章.每页的报纸,问题,日期,页码和OCR文本都已放入mySQL数据库.

我们现在想要在PHP中构建类似Google的搜索引擎,以查找给定查询的页面.它必须快速,并且任何搜索都不会超过一秒钟.

我们该怎么做?

php mysql search-engine

23
推荐指数
3
解决办法
4万
查看次数

我该怎么做才能减少我的可执行文件的大小(Delphi)?

我使用Delphi 2009为桌面程序发布了一个可执行文件(.EXE).我没有运行程序所需的外部DLL或资源.

我使用两个组件:LMD Innovative的ELPackSergey Tkachenko的TRichView,它们被编译成我的可执行文件.

当我使用"Release"构建配置构建我的生产版本时,生成的可执行文件是13,533 KB.

在使用Delphi 2009之前,我使用的是Delphi 4.它生成的可执行文件只有2,671 KB,同时包含相同的两个组件,并且基本上具有与我当前版本相同的代码.

我确实理解Delphi 2009完全是Unicode(这是我升级的主要原因),并且Unicode可以导致大小增加一倍.但这大约要大5倍.

我的可执行文件必须保持5倍大的原因吗?或者有一些简单的方法来减少可执行文件大小的重要部分?


请注意.有些人正在回答压缩Delphi EXE的方法.这不是我想要做的.我试图简单地看到为什么这么多空间被用来删除可能没有必要的东西.如果这样做,如果需要,仍然可以在之后进行压缩.

安装后,可执行文件的大小无关紧要.它用于下载目的,并最大限度地减少要压缩它的服务器负载和下载时间.我更喜欢使用Inno Setup并在安装例程中压缩程序本身.然后在安装时,它将扩展为完整大小.这既可以防止可能的病毒检测,又可以消除在内存中解压缩程序所需的额外启动时间.此外,我编写了可执行文件和我的安装例程的代码,并且一些压缩技术与此不兼容.

有关压缩的更多信息,请参阅StackOverflow问题: Delphi EXE压缩器?


ldsandon让我准确提供我正在使用的选项,所以他们在这里:

编译选项http://www.beholdgenealogy.com/img/compilingoptions.jpg

链接选项http://www.beholdgenealogy.com/img/linkingoptions.jpg

delphi executable build-process

23
推荐指数
5
解决办法
2万
查看次数