哪种方法更好:Process.Start或直接调用DLL?

shy*_*kov 7 c# dll exe native process.start

在我们的团队中,我们面临着这样的选择:我们需要调用外部第三方代码并从C#代码处理其输出.

第三方代码有两种形式:dlls和单个exe文件集(可能单独调用它们dll).可能的方法可能是:使用Process.Start语句来运行可执行文件并捕获其输出.另一个是dll直接打电话.

我试图了解我们应该使用哪种方法.

一方面调用可执行文件很简单,但另一方面 - 它感觉不健壮.

一方面调用dll看起来更正确的方式来完成这项工作,但另一方面 - C#为本机C代码中的所有函数提供绑定可能是非常复杂的任务.

但我需要对这个主题进行更实质的分析才能做出最终决定.以前是否有人面对同样的问题,也许你可以分享你的发现.

这将非常有用!

编辑:我在谈论这个特殊情况下的视频转换.我需要从用户那里获取视频流并将其转换为一种视频格式.可以调用ffmpeg来完成这项工作,一切正常,直到出现问题,我需要重新开始编码或采取任何行动.我无法估计需要多长时间,如果我需要并行转换几个视频ffmpeg将不会那么灵活,因为我计划它......

至少我现在看到了.当我深入研究时,可能会出现更多问题.

Vla*_*lov 4

有几个考虑因素:

  1. 有dll的源码吗?
  2. 你打算如何调用这些 dll?
  3. dll的API有多复杂,以及您的用法?

取决于答案。

如果满足以下条件,则创建绑定:

  • 您将频繁调用 dll。直接调用要快得多。
  • 你有来源并检查它们有多好。否则你可能会遇到内存泄漏、调用约定等巨大问题。
  • dll 的 API 并不太复杂,因此您不需要向它们发送 C++ 对象等。或者实现 exe 中已经完成的许多工作。

使用可执行文件:

  • 如果您只需要偶尔运行它们。创建另一个进程的开销对您来说并不重要。
  • 如果您不确定代码的质量。这对你的代码来说会更加安全和健壮,而不是加载一些实现得很糟糕的 dll。如果出现问题,您始终可以尝试多次运行 .exe。但如果 dll 使您的应用程序崩溃,您将无能为力。
  • 如果API非常复杂,并且exe有很多功能,那么您将不得不重新实现。