小编Lin*_*nas的帖子

为什么相同的代码在线程中执行得更快?

考虑这段非常简单的代码:

uses Diagnostics;

const
  ITER_COUNT = 100000000;

procedure TForm1.btn2Click(Sender: TObject);
var
  val: Double;
  i: Integer;
begin
  sw := TStopwatch.StartNew;

  val := 1;
  for i := 0 to ITER_COUNT - 1 do
  begin
    val := val + i;
    val := val - i;
    val := val * 10;
    val := val / 10;
  end;

  sw.Stop;

  mmo1.Lines.Add(Format('Simple completed in %D ms. Result: %G',
    [sw.ElapsedMilliseconds, val]));
end;
Run Code Online (Sandbox Code Playgroud)

这个简单的循环在我的PC上执行4027毫秒.现在,如果我编写相同的代码,只使用不同的线程:

procedure TForm1.btn3Click(Sender: TObject);
begin
  sw := TStopwatch.StartNew;
  TThread.CreateAnonymousThread(
    procedure
    var
      val: Double;
      i: …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

10
推荐指数
1
解决办法
774
查看次数

如何在Delphi中处理项目特定的组件?

假设我们有一个团队可以处理许多不同的项目.每个团队成员在其开发周期中使用不同的可视/非可视控件/组件集.由于Delphi要求在IDE中全局编译和安装每个组件,如何在处理由其他团队成员启动的项目时管理这种情况?

如果我可以从版本控制中检出项目的源代码并且能够立即编译它,那将会很棒.我不关心或有时不知道这个项目需要什么视觉或非可视组件,我想它们都应该包含在项目源中.

也许有一些工具可以读取主项目文件或目录,并在项目加载时编译/安装所有需要的组件(并在项目关闭时卸载它们)?

你如何在Delphi中处理这个问题?

delphi components delphi-xe

8
推荐指数
2
解决办法
1172
查看次数

什么数据结构最适合VirtualStringTree?

我想每个曾经使用过Delphi的VirtualStringTree的人都会同意它是一个很棒的控件.它是一个"虚拟"控件(您的数据必须保存在其他位置)所以我在想什么数据结构最适合这样的任务?IMO数据结构必须支持层次结构,它必须快速且易于扩展.最简单的实现是使用记录,这就是可以找到的大多数文档所暗示的内容.但是如果你需要做一些快速查找,计算总数等怎么办?您与VirtualStringTree一起使用的数据结构是什么?

编辑1:我正在使用Delphi 2010.

好的,我会尝试提供一些有关我的要求的更多细节.数据大小可以变化很大,从1到数千个项目.每个项目可以包含多个字符串,整数值.我需要随机访问,我的数据可以在应用程序生命周期中多次更改.良好的性能是非常理想的.我还需要数据保存和重新加载.

EDIT2:得到1个答案,所以我会试着评论我的意见.谢谢,Dorin的答案,但我不认为你的结构很方便.1)它不处理层次结构.2)为每个节点分别设置TStringList或TList不是非常有效的IMO.通过这种实现,我只能查找当前节点的数据,但不能有效地搜索整个树.

我认为这个数据结构必须像一棵树.它必须具有能够添加子节点的节点.然后我就可以在OnInitNode事件中获取节点的数据,检查我的节点是否有一些子节点,如果是,则设置ivsHasChildren标志,然后在OnInitChildren事件中设置正确的子节点数.稍后在OnGetText事件中,我可以从我的节点结构中获取所需的数据,并根据Column索引将其设置为CellText.我的想法是拥有一个单独的数据结构,并使用它完成所有需要的操作,而无需使用VirtualStringTree.希望有人得到我的观点:).

EDIT3:我发现了非常有趣的JclTrees单元,乍一看可以用来实现我正在寻找的东西.它属于JCL library.缺乏体面的文档使得很难快速调查它的功能.当我有更多时间时,我可能会更深入地研究它.

delphi virtualtreeview data-structures

7
推荐指数
1
解决办法
1535
查看次数

dwscript - 如何枚举所有可用的类型?

嘿,Delphi Web Script是非常棒的脚本引擎.我正试图在我的一个项目中使用它.但是,我不确定是否可以枚举脚本引擎中可用的所有类型,函数,例如,我想要一个列表,其中包含我在脚本编写时可以使用的所有方法(这包括所有内部和外部类型,功能,程序等).快速脚本具有树视图组件,它公开了您可以使用的所有类型.我在dwscript中寻找类似的东西.提前致谢.

delphi dwscript

7
推荐指数
1
解决办法
392
查看次数

如何从外部查看器调试器可视化工具获取对象或其数据的引用?

我正在尝试为 TJSONObject 或 TJSONValue 编写调试器可视化工具。我的大部分可视化工具都运行良好。我遇到的问题是获取对 TJSONObject 的引用,或者至少是对 TJSONObject 的 tostring() 值的引用。

根据我看到的示例,以及 Jeremy North 在http://edn.embarcadero.com/article/40268上发表的精彩帖子,我应该从 IOTADebuggerVisualizerExternalViewer 实现的 Show 方法中获得我需要的内容。具体来说,来自 Expression、TypeName 和 EvalResult 字符串参数。

据我了解,Expression 是被检查(可视化)的变量的名称,TypeName 是变量的类名,EvalResult 是变量的默认字符串表示形式。

为了进行简单的测试,我在我的 TFrame 后代上放置了一个 TMemo。从 IOTADebuggerVisualizerExternalViewer.Show 方法中,我调用 TFrame 的 ShowJSONObject 方法,并向该方法传递 Expression、TypeName 和 EvalResult。相关代码出现在这里:

function TDebuggerJSONVisualizer.Show(const Expression, TypeName, EvalResult: string;
  SuggestedLeft, SuggestedTop: Integer): 
  IOTADebuggerVisualizerExternalViewerUpdater;
var
  AForm: TCustomForm;
  AFrame: TJSONViewerFrame;
  VisDockForm: INTACustomDockableForm;
begin
  VisDockForm := TJSONVisualizerForm.Create(Expression) as INTACustomDockableForm;
  AForm := (BorlandIDEServices as INTAServices).CreateDockableForm(VisDockForm);
  AForm.Left := SuggestedLeft;
  AForm.Top := SuggestedTop;
  (VisDockForm as IFrameFormHelper).SetForm(AForm);
  AFrame …
Run Code Online (Sandbox Code Playgroud)

delphi json debuggervisualizer delphi-2010 delphi-xe

5
推荐指数
1
解决办法
500
查看次数