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

Pan*_*al. 1 delphi multithreading delphi-xe2

我需要对备忘录中的文本进行数学计算.[档案大小:~2mb]

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

我将备忘录文本传递给字符串以进行解码.我想使用线程运行我的解码函数会更快.但经过一些谷歌搜索后,我没有找到符合我目的的好例子.

功能示例:

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)
Run Code Online (Sandbox Code Playgroud)

我想把工作分成小块,平均分工,让我们说3..8个线程并将解码函数分配给那些线程.你能指导我吗?

处理文本文件的当前时间:~35秒.谢谢你的热心帮助.

Dav*_*nan 5

线程不是问题.你的功能entr_base_N立即运行.在调试器中尝试.你会发现它根本不需要时间.在现代计算机上处​​理2MB字符串是微不足道的.也就是说,我总是建议在可能的情况下预先分配一个返回缓冲区.

所有时间都花在将结果字符串发送回备忘录控件上.发生的事情是你将#13和#10字符转换为#23和#20.无论出于何种原因,备忘录控件都不喜欢这样.在我看来,你发回的字符串根本没有换行符,而备忘录的自动换行代码表现不佳.

快速而肮脏的方式来确定这是如此设置WordWrapFalse您的备忘录.

这里的重要教训是,您必须在尝试优化之前正确识别瓶颈.尽管如此,这是一个容易陷入困境的陷阱,因为我最初的努力回答了这个问题.

  • 多线程无济于事.现在1.5s仍在向备忘录发送文本.修改字符串的代码几乎是即时的.这是一个很小的数据.在尝试提高性能之前,必须始终确定瓶颈. (4认同)