【问题标题】:why memo.loadFromFile takes so long time?为什么 memo.loadFromFile 需要这么长时间?
【发布时间】:2009-12-27 19:39:27
【问题描述】:

我使用 TMemo 来显示长字符串。我对这个方法感到非常惊讶: Memo1.loadfromfile('mem.txt') [mem.txt = 111 kB] 花了大约 35 秒,真的很长。

如何让 TMemo 实时加载字符串?

感谢

【问题讨论】:

    标签: delphi vcl


    【解决方案1】:

    因为 WordWrap 属性为真...

    【讨论】:

    • 为什么有什么解释会产生影响吗?
    【解决方案2】:

    :-) 你可以试试

    try
      Memo1.Lines.BeginUpdate;
      Memo1.LoadFromFile('mem.txt');
    finally
      Memo1.Lines.EndUpdate;
    end;
    

    【讨论】:

    • finally 中与代码部分对应的部分应该在 try 之前进行。不在尝试中。 DisabledUpdates 应该在尝试之前进行。如果 DisabledUpdates 永远不会执行或因任何原因失败,则不应调用 EnableUpdates。
    • 您可能是指 BeginUpdate/EndUpdate。 TStrings.LoadFromStream(从 LoadFromFile 调用)已经调用了这些。
    • 上面的代码不存在...(DisabledUpdates、EnableUpdates)。不过看起来不错 ;-)
    • 对不起,我是故意输入的。 DisableControls 在数据集中 + BeginUpdate = DisableUpdates :D
    • LoadFrom...() 方法已在内部调用 Begin/EndUpdate()。除了增加/减少内部引用计数器之外,手动调用它们没有任何作用。
    【解决方案3】:

    您没有说明您使用的是哪个版本的 Delphi。在 Delphi 2009 及更高版本中,TStrings 现在支持 Unicode,因此在加载非 Unicode (Ansi/UTF) 编码文件时必须执行额外的处理。

    【讨论】:

    • Delphi 7....而且我使用 ANSI 字符串...我从未使用过 Unicode 字符串,但是 Delphi 7 中的宽字符串是做什么用的?它是否提供 Unicode 字符串处理? /这只是顺便提的问题/
    • WideString 是 D2007 及更早版本中唯一可用的 Unicode 字符串类型。在 D2009 中,引入了一种新的 UnicodeString 类型,它比 WideString(它只是 ActiveX/COM BSTR 字符串类型的简单包装)更有效(引用计数、写入时复制、使用 RTL 内存管理器等)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 2011-08-27
    • 2011-12-07
    • 2021-11-27
    • 2015-07-19
    相关资源
    最近更新 更多