我正在处理大文件,直接写入磁盘很慢.因为文件很大,我无法在TMemoryStream中加载它.
TFileStream没有缓冲,所以我想知道是否有一个可以提供缓冲流的自定义库,或者我是否应该只依赖OS提供的缓冲.OS缓冲是否可靠?我的意思是如果缓存已满,可以从缓存中刷新旧文件(我的)以便为新文件腾出空间.
我的文件在GB范围内.它包含数百万条记录.不幸的是,记录不是固定大小.所以,我必须做数百万的读数(4到500字节之间).阅读(和写作)是顺序的.我不会上下跳进文件(我认为这是缓冲的理想选择).
最后,我必须将这样的文件写回磁盘(再次写入数百万的小写).
对David Heffernan赞不绝口!
David提供了一段很棒的代码,提供缓冲磁盘访问.
人们你必须拥有他的BufferedFileStream!这是黄金.并且不要忘记upvote.
谢谢大卫.
新的TFileOpenDialog和旧的TOpenDialog有什么区别?
在我的计算机(Win 7/DXE)中,当我运行代码时,对话框看起来一样.
我正在寻找保护和许可 我的商业软件的工具,理想情况下必须提供与Delphi 7-2010兼容的SDK,支持AES加密,密钥生成器和创建我的应用程序试用版的能力.
我目前正在评估ICE许可证.有人有这个软件的经验吗?
我有一段代码试图在一秒钟内写入磁盘许多文件.但是,我已经安装了Kaspersky Anrivirus 2011.
Stream:= TFileStream.Create(sName, fmCreate);
Run Code Online (Sandbox Code Playgroud)
该代码完全适用于卡巴斯基2010,如果我禁用其扫描仪(它不能完全从内存中卸载 - 除非它已卸载),它也适用于卡巴斯基2011.如果(Kaspersky 2011正在运行并且我懒散地写入磁盘),代码也可以工作.所以它显然不够快,无法处理我的磁盘请求.
我得到的错误是EFCreateError('无法创建xxx文件blablabla').错误是随机的.大多数文件都写入磁盘.大约10%的失败.
我曾试图获得支持但却无法在卡巴斯基找到真正的人与之交谈.他们所谓的"支持"实际上是一个FAQ数据库.当然,它讲的是如何安装产品和相关的东西.关于编程相关问题没有任何内容.有任何想法吗?
PS:这对整个Delphi社区都有影响!如果他们使用KIS 2011作为防病毒软件,我们所有客户都将无法使用Delphi软件.目前我建议我的用户禁用他们的防病毒软件,但我需要一个真正的解决方案.
如果有KIS 2011的人可以确认问题,那就太好了.只需创建一个小程序,使用TFileStream将200个小文件写入磁盘.
更新:
要测试代码,请尝试在循环中使用代码来创建1000个文件.该程序创建了一堆文件(随机数),然后在StreamFile:= TFileStream.Create失败.更新:可以通过在创建每个文件后输入一个小延迟来解决此问题.
https://docs.google.com/forms/d/1H3_O1z1iEqfh9ZT9u3B0R1tGEj-Hc9o7rAE0LKPr33Y
2013年更新
从今天下午开始(更新后)KIS与Delphi发生冲突.每次编译项目时,KIS都会达到100%的CPU利用率.我将不得不卸载它.
2017年更新
从2017年开始,我所有的Delphi程序都会神奇地消失所有误报警.似乎卡巴斯基这样的程序从其病毒列表中删除了Delphi生成的可执行文件就足够了; 所有其他较小的防病毒程序紧随其后.
Delphi 7,Win 7(32),KIS 2011
我前段时间已经看到人们在Delphi XE中讨论新的多线程,以及由于Delphi实现多线程的方式,Delphi存在一些"原生"问题.他们建议使用一些外部库来替换默认的Delphi多线程.
你能指点我一些文档和Delphi XE最流行的多线程库吗?谢谢
我负责Delphi/Win32项目管理应用程序.我刚刚完成了Delphi 2009的迁移.
越来越多的美国用户希望在他们的Mac计算机上使用该应用程序,而大多数用户是Windows用户.
是否有解决方案可以轻松构建一个原生在MacOS上运行的Delphi应用程序?
更新:
随着2011年末RAD Studio XE2的发布,Delphi开发人员应该能够构建一次,并在Win 32/64和MacOS 32上进行分发,并承诺提供iOS支持.
我应该在从TObject或TPersistent派生的类的构造函数中调用"inherited"吗?
constructor TMyObject.Create;
begin
inherited Create; // Delphi doc: Do not create instances of TPersistent. Use TPersistent as a base class when declaring objects that are not components, but that need to be saved to a stream or have their properties assigned to other objects.
VectorNames := TStringList.Create;
Clear;
end;
Run Code Online (Sandbox Code Playgroud) 我需要一个非常简单的函数来绘制一堆具有抗锯齿功能的行.它必须遵循Delphi范式:自包含和SYSTEM INDEPENDENT(没有DLL地狱),快速,简单.有谁知道这样的图书馆?
到现在为止我尝试过:
WuLine
swissdelphicenter.ch/torry/showcode.php?id=1812
我不认为这段代码的作者曾经运行过它.画一条线需要一秒钟!这显然只是出于教育目的:)
来自TMetaFile
链接的抗锯齿图:blog.synopse.info/post/2010/04/02/Antialiased-drawing-from-TMetaFile
还没有真正尝试过这个(我可能很快就会这样做).它仅适用于TMetaFiles.它只加载EMF文件并使用抗锯齿功能绘制它.此外,该网站上的许多代码只是示范/教育.
Image32
非常好的图书馆 - 迄今为止最完整.我可能会用它,但它对于我需要的东西来说太过分了.
缺点:
- 添加到应用程序的足迹非常大.
- 真的很难用.
- 即使是简单的任务,你也需要深入了解其模糊的文档. - 提供的演示代码太复杂了.
- 越野车!
- 没有最近的更新(修复错误)
Anti-Grain Geometry库
该库需要一个不错的安装程序.该库的编写者是Linux/Mac用户.Windows实现看起来很奇怪.我不能对图书馆本身说些什么.
Xiaolin Wu的基础功能(由Andreas Rejbrand撰写)
刚看到以下几篇文章.Andreas Rejbrand提供了一个非常紧凑的解决方案.迄今为止的最佳解决方
看起来我必须解释为什么我不喜欢大型第三方库和VCL:
如何在项目选项和环境选项中的"库"路径中设置"目录/条件"?德尔福帮助对这些非常重要的设置没有太多说明.我有各种奇怪的错误,因为我的VCL之间存在错误的依赖关系.
1.
我在一个名为ThirdPartyPackages_D7.dpk的包中合并了一大组第三方控件.这在我重新安装Delphi时很有用,因为我不必每年都重新安装所有这些第三方VCL.
然后,我在MyControls_D7.dpk中拥有自己的控件,这取决于ThirdPartyPackages VCL.我还有另一个依赖于MyControls的包BlgPackage.dpk.
在链的末尾是我的应用程序(DPR项目),它使用BlgPackage中的控件.
ThirdPartyPackages.dpk -> MyControls.dpk -> BlgPackage.dpk -> MyApplication.dpr
Run Code Online (Sandbox Code Playgroud)
当我将内容更改/编辑到第二个包(MyControls.dpk)并构建DPR应用程序时,它可以工作.编译器会看到对该包进行的更改.但是,如果我关闭项目并加载并编译BlgPackage,它会抛出一条令人讨厌的消息,即在MyControls中找不到函数xyz,因为我将其删除(我已将MyControls的单元与应用程序的单元并行加载到IDE中).似乎构建应用程序只刷新所有已使用包的DCU文件,但不刷新DCP/BLP文件.
如何编写和编译包中的代码,而无需将包显式加载到IDE中并构建它们?(注意:我有一个令人讨厌的错误,它不允许我在不重新启动IDE或同时加载一组项目/包(*.bpg)的情况下在项目之间切换.)
2.
另一个问题是我想将包的编译文件(DCP/BPL/DCU)存储在其文件夹中(例如c:\ MyProjects\Blg).
如果我将BlgPackage包的"输出目录","单元输出目录"和"DCP输出目录"框设置到其文件夹,不仅会将其BPL/DCU/DCP文件存储在那里,还会存储MyControls的BPL/DCP文件将被存储在那里.如何将每个包的二进制文件放在单独的文件夹中?
Delphi 7,Win XP,所有项目设置为"根据需要重建"
我有一个包含大约10,000行文本的TXT文件.我想在TMemo中显示这些行.但是我不想在我的程序中分发那个TXT文件.如何将它作为资源WITHIUT使用它集成到我的EXE文件中,stringtable {}因为这需要每行的标识符(所以我将不得不添加10000个标识符).
_
我有Delphi XE