程序在几台计算机上运行缓慢

Ori*_*zer 4 delphi performance

我有一个程序,我在多台网络PC上运行.当我编译最新版本时,它在网络上的2台PC上运行得非常慢,但对其他人来说运行正常.

当我安装了额外的2GB RAM时,这曾经发生在旧的开发PC上.当我删除额外的2gb并重新编译时,它将适用于所有人.

现在,我正在使用一台全新的机器并遇到同样的问题.我重新启动后尝试重建项目,但仍然有同样的问题.

对于所有其他PC,程序加载大约3-5秒.在这两台PC上,加载时需要45秒到1.5分钟......

其中一台PC是较旧的戴尔Dimension 8200,但另一台则是较新的OptiPlex,它与网络上的其他几台PC完全相同,所以这才真正令人困惑.

现在,我不得不恢复旧版本,以便它能够为每个人正确运行.

有没有人想知道要尝试什么?

提前致谢!!!


编辑:

好吧,昨天是一个疲惫的一天,尝试各种方法来解决这个问题.这是我尝试过的问题以及问题的开始:

使用新程序

回到所有更新组件的旧版本,但仍然有同样的问题

使用旧程序

我决定回到绘图板并从旧版本的应用程序开始,逐步添加新功能.

  1. 使用旧组件重新编译旧版本 - 程序运行正常
  2. 更新到新的DevExpress组件 - 程序运行正常
  3. 更新到新的ESBPCS组件 - 程序运行正常
  4. 更新到新的DeepSoftware组件 - 程序运行正常

好的,现在我们知道我更新的组件集没有任何内容......

  1. 为2个图像列表中的每一个添加了1个图像 - 程序运行正常
  2. 添加了新的数据库表 - 程序运行正常
  3. 添加了打开和关闭新表的代码 - 程序运行正常
  4. 添加了新动作到动作列表,并为新动作添加了一个菜单项和工具栏按钮(动作此时不执行任何操作) - 程序运行正常
  5. 为应用程序添加了一个新的BLANK表单,并添加了代码以打开新表单 - BAM!

因此,只在应用程序中添加一个表单就是导致问题的原因!我删除了打开表单的所有代码,注释掉了uses子句并从项目源中删除了uses条目,一切都恢复正常了!

有人对此有任何想法吗?

谢谢!


编辑2:

对于@Warren P - 这是我的.DPR来源:

program Scheduler;

uses
  ExceptionLog,
  Forms,
  SchedulerMainUnit in 'SchedulerMainUnit.pas' {FrmMain},
  SchedulerDBInfoUnit in 'SchedulerDBInfoUnit.pas' {FrmDBInfo},
  SchedulerHistoryUnit in 'SchedulerHistoryUnit.pas' {FrmHistory},
  SchedulerOptionsUnit in 'SchedulerOptionsUnit.pas' {FrmOptions},
  SchedulerExtVersionUnit in 'SchedulerExtVersionUnit.pas' {FrmExtVersion},
  SchedulerSplashUnit in 'SchedulerSplashUnit.pas' {FrmSplash},
  SchedulerInfoUnit in 'SchedulerInfoUnit.pas' {FrmInfo},
  SchedulerShippedUnit in 'SchedulerShippedUnit.pas' {FrmShipped};  {<-- This is the new form with the issue}

{$R *.res}

begin
  Application.Initialize;
  Application.Title := 'SmartWool WIP Scheduling Assistant';
  Application.CreateForm(TFrmMain, FrmMain);
  Application.CreateForm(TFrmDBInfo, FrmDBInfo);
  Application.CreateForm(TFrmHistory, FrmHistory);
  Application.CreateForm(TFrmOptions, FrmOptions);
  Application.CreateForm(TFrmExtVersion, FrmExtVersion);
  Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)

这里是创建启动的主窗体的初始化部分:

initialization

FrmSplash:=TFrmSplash.Create(Application);
FrmSplash.Show;
FrmSplash.Refresh;
Run Code Online (Sandbox Code Playgroud)

编辑3:

任何人??? 请?

Vil*_*nde 12

当尝试访问该计算机上不可用的资源(例如网络驱动器或Internet主机)时,程序可能正在等待超时.

在启动程序时尝试运行Process Monitor并查找文件打开调用.过滤输出,使其仅显示您的过程.

http://technet.microsoft.com/en-us/sysinternals/bb896645


Rob*_*ove 6

最初的性能问题最初看起来非常令人生畏.

我参加了许多团队,人们试图猜测性能问题的原因.这有时可行,但远不如实际测量代码有效.

当在开发机器上可重现时,我会推荐一个分析器.

之前有一个问题询问了 Delphi Profiling工具,它有几种可以使用的工具.

当您无法在开发机器上重现问题时,它会变得有点困难,但并非不可能.通常我发现问题与不同的应用程序依赖关系有关,并且表现不佳.了解对应用程序的外部影响可以帮助查明问题.

在我的一些应用程序中特别常见的外部问题.

  • 网络
  • 数据库
  • 应用服务器
  • 安装或数据文件位置(即磁盘性能)
  • 病毒和恶意软件扫描程序
  • 与您的其他应用程序如病毒等.

要监控与网络相关的项目(即数据库,Web服务等...),我通常使用Wireshark,它允许我查看资源是否在预期的时间内响应.我最常见的问题是DNS表现不佳,可以使用Wireshark找到.

您可以使用AutoRuns程序确定计算机启动时启动的所有内容,它可用于确定计算机之间的差异.

但最重要的是,我的日志记录可以在我的应用程序中打开,这使我可以将问题隔离到特定的代码区域.缩小到特定代码部分可以减少猜测,并使您可以专注于一些可能的问题.


Mik*_*eeg 4

我为此创建了一个日志函数,我在特定位置调用该函数(在您的情况下,尤其是在启动期间)。它为每个日志文本添加时间戳,并将它们存储在定期保存的 TMemo 中。不仅在调试时非常有帮助,而且还可以阐明您的问题。