0

DotNetZip 库有一个奇怪的性能问题。

在应用程序(在 asp.net 下运行)中,我从数据库中读取一组文件,并将它们即时打包成一个 zip 文件供用户下载。

在我的开发笔记本电脑上一切正常。一个大约 10MB 的 zip 文件,默认压缩率大约需要 5 秒才能完成。但是,在客户的开发服务器上,压缩同一组文件大约需要 1-2 分钟。我什至经历了更长的时间,长达几分钟。压缩运行时 CPU 利用率为 100%,否则保持在 0% 左右,因此不是由于过载。

更有趣的是,在生产服务器上,大约需要 20 秒才能完成。

我应该从哪里开始寻找?

一些硬件规格:

我的笔记本电脑

在具有 2 个内核和 4GB RAM 的专用虚拟机上运行的开发环境。

  • 酷睿 i5 M540 2,5GHz
  • 8 GB 内存
  • Win7

开发服务器

根据我的电脑上的属性对话框(可能是虚拟化的)

  • 英特尔至强 5160 3GHz
  • 540MB 内存
  • 视窗 2003 服务器

任务管理器报告单核

生产服务器

根据我的电脑上的属性对话框(可能是虚拟化的)

  • 氙气 5160 3GHz
  • 512MB 内存
  • 视窗 2003 服务器

任务管理器报告双核

更新 服务器正在 VMWare 主机上运行。发现隐藏在任务栏中的 VMWare 图标。

4

2 回答 2

0

正如米奇所说,病毒扫描程序可能是您最好的选择。结合开发服务器只是单核机器和生产服务器是双核(可能没有病毒扫描程序)可能会解释延迟。了解这些机器中磁盘的类型也很有价值。例如,如果生产服务器和您的笔记本电脑有 SSD,而开发服务器有一个非常旧的低 rpm 标准硬盘,这也可以解释延迟。尝试查看开发服务器和生产服务器的 zip 文件夹的 I/O 读/写,您可以使用SysInternals 工具为此,如果您有病毒扫描程序或任何其他意外进程正在运行,您可能会在那里看到不同之处。SysInternals 工具在快速找到罪魁祸首方面可能很有价值。

更新:因为您评论了 zip 是在内存中创建的,所以我想补充一下,您还可以使用这些工具更好地了解内存中发生的情况。由于开发服务器和生产服务器非常相似,延迟几分钟,您会期望得到几乎相同的结果,这让我想到了页面文件。看看开发服务器上是否有其他进程占用了大量内存. 如果没有足够的空间用于 zip 操作,开发服务器将开始使用页面文件,这非常昂贵。

于 2011-10-13T06:51:28.327 回答
0

硬件似乎是这里的问题。

客户的 IT 人员现在已经升级了运行虚拟化开发服务器的服务器硬件,我现在看到压缩时间约为 6 秒,与我的本地计算机上相同的包大小和文件数量。

现在在“我的电脑”属性窗口中找到的规格:

  • AMD 飞鸿 II X6 1100T
  • 3.83GHz 1,99 GB 内存
于 2011-12-14T10:27:15.343 回答