【问题标题】:How to optimize an asp.net spawning a new process for each request?如何优化 asp.net 为每个请求生成一个新进程?
【发布时间】:2011-03-09 16:21:15
【问题描述】:

我有一个生成 Process 的 asp.net mvc 应用程序,如下所示:

        Process p = new Process();

        p.EnableRaisingEvents = true;
        p.Exited += new EventHandler(p_Exited);

        p.StartInfo.Arguments = "-interaction=nonstopmode " + inputpath;
        p.StartInfo.WorkingDirectory = dir;

        p.StartInfo.UseShellExecute = false;
        p.StartInfo.FileName = "pdflatex.exe";

        p.StartInfo.LoadUserProfile = true;

        p.Start();
        p.WaitForExit();

在继续之前,我需要知道pdflatex.exe 是托管代码还是本机代码?

编辑 1

我需要考虑这一点,因为:(希望我没有错……)

  1. 每个 Asp.net 应用程序都在单独/隔离的 AppDomain 中运行,而不是在单独/隔离的进程中。
  2. 本机可执行文件不能存在于 AppDomain 中。

待续……

简而言之,我希望我的网站不会为每个请求生成一个新进程。因为进程比应用程序域更昂贵。

编辑 2

我的 asp.net mvc 应用程序允许用户提交 LaTeX 输入命令,例如 $ax^2+bx+c=0$ 以转换为呈现二次方程的 pdf 文件。在幕后,这个 Web 应用程序将生成一个执行 pdflatex.exe 的进程。 pdflatex.exe 的工作是将 LaTeX 输入命令转换为 pdf 文档。

【问题讨论】:

  • 如果非托管程序承载 .NET Framework 会怎样?您认为这是托管的还是非托管的?
  • @bdonlan、@wj32、@Sanjeevakumar、@Felice:请看我的更新。
  • 如果你使用Process.Start(),猜猜是否启动了一个新进程?您不能在 asp.net AppDomain 中运行另一个可执行文件。
  • @Recycle Bin,你需要告诉你的实际问题——你想通过启动 exe 来做什么?它的简单数学 - 您显示的代码将始终在每次调用时启动新进程。如果每个请求调用它 3 次,则每个请求将启动三个进程。是否可以跨请求使用相同的进程取决于该进程应该执行的任务、它是如何实现的、它是否支持任何 IPC 机制等。

标签: c# asp.net


【解决方案1】:

不是一件容易的事,但你可以看看那个库Microsoft.Cci.PeReader.dll 可能解析 PE 标头可以指向您需要的信息。

【讨论】:

    【解决方案2】:

    当“尝试加载非托管动态链接库或可执行文件(例如 Windows 系统 DLL)时,Assembly.LoadFile() 会抛出 BadImageFormatException,就像它是 .NET Framework 程序集一样。” 参见http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx的备注和示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2012-02-26
      • 2013-04-25
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多