【发布时间】:2021-10-11 15:39:15
【问题描述】:
我有一个 winforms 程序,用于监视保存在文件夹中的新文本文件。当它找到文件时,它会读取它,将数据写入 SQL 表,进行一些更新,然后调用另一个程序使用 Crystal Reports 2021 打印报表。
然后它等待下一个文件。
这是代码的副本
'System.Diagnostics.Process LOProc = new System.Diagnostics.Process();
LOProc.StartInfo.FileName = PSParmServicePGM;
LOProc.StartInfo.Arguments = PSGUID;
LOProc.Start();'
大约一周后,服务器变得无法响应,我假设这是内存问题。如果我退出并重新登录并启动我的程序又可以工作一周,那么我必须重新做同样的事情。
我运行了 processmon,但没有看到第二个程序卡住。
但我看到 splwow64.exe 正在增长。 第二个程序直接打印到联网的打印服务器。打印机未安装在运行打印作业的服务器上。
调用第二个程序但不占用调用程序等待第二个程序完成的正确方法是什么。
【问题讨论】:
-
一个建议,请使用
using -
我认为这里没有足够的信息来断定您正在不正确地启动您的流程。例如,您的第二个进程可能根本没有退出,这与此处显示的代码无关。我认为您需要更多的故障排除。
-
你知道
splwow64.exe是什么以及做什么吗? -
Splwow64.exe 是一个 Windows 组件,用于在 x86 应用程序和 x64 驱动程序之间进行互操作。它应该是短暂的。如果不是,并且它的内存使用量正在增加,则可能是操作系统或您正在使用的打印机的驱动程序存在问题。我注意到 Server 2008 有一个修补程序,其中 splwow64.exe 进程不会停止:support.microsoft.com/en-us/topic/…。
-
或者,您可能需要考虑改用 x64 版本的应用。这样做,您根本不会产生 splwow64.exe 进程。
标签: c# printing process crystal-reports