首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >划分工作,将任务分配给线程数组

划分工作,将任务分配给线程数组
EN

Stack Overflow用户
提问于 2012-07-06 04:25:21
回答 2查看 404关注 0票数 1

我需要对备忘录中的文本进行数学计算。文件大小:~2mb

一个合适的例子是我需要解码的编码文本。

我将备忘录文本传递给一个字符串,以便对其进行解码。我想使用线程运行我的解码函数会更快。但在谷歌上搜索后,我没有找到一个适合我的目的的好例子。

示例函数:

代码语言:javascript
复制
function entr_base_N(my_text:String):String;
var
    ts_hamil64:Integer;
begin
    For ts_hamil64 := 1 to Length(my_text) do
    begin
         Result:= Result + Chr(Ord(my_text[ts_hamil64])+10)
    end;    
end;
.....
.....
Memo1.Text:=entr_base_N(Memo1.Text)

我想把工作分成小块,平均分配工作,比如说3..8个线程,并将我的解码函数分配给这些线程。你能在这方面给我指点一下吗?

当前处理文本文件的时间:~35秒。谢谢你的好意帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-06 05:56:14

线程不是问题所在。您的函数entr_base_N会立即运行。在调试器内部尝试。你会发现这根本不需要时间。在现代计算机上,处理一个2MB的字符串非常简单。也就是说,我总是建议在可能的情况下预先分配一个返回缓冲区。

所有时间都花在将结果字符串发送回memo控件上。发生的情况是,您正在将#13和#10字符转换为#23和#20。无论出于什么原因,备忘录控件都不喜欢这样。在我看来,您发回的字符串根本没有换行符,并且memo的换行代码执行得很糟糕。

一个简单快捷的方法就是在你的备忘录中将WordWrap设置为False

这里的重要教训是,在尝试优化之前,您必须正确地识别瓶颈。然而,这很容易陷入陷阱,正如我最初笨拙地回答这个问题所证明的那样。

票数 5
EN

Stack Overflow用户

发布于 2012-07-15 00:43:03

要更快地对Memo1.Text进行赋值,可以使用以下命令:

代码语言:javascript
复制
memo1.Perform(wm_setredraw, 0, 0);
try
  memo1.Text:= entr_base_N(memo1.Text);
finally
  memo1.Perform(wm_setredraw, 1, 0);
  memo1.invalidate;
end;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11352059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档