在我们的团队中,我们面临着选择:我们需要调用外部第三方代码并从我们的 C# 代码中处理其输出。
第三方代码有两种形式:一组 dll
和单个 exe
文件(可能调用这些 dll
它自己的)。可能的方法是:使用 Process.Start
语句运行可执行文件并捕获其输出。还有一种是直接调用dll
。
我正在尝试了解我们应该使用哪种方法。
一方面,调用可执行文件很简单,但另一方面——感觉起来不够健壮。
一方面,调用 dll
看起来更正确,但另一方面 — 为我们提供的所有函数提供 C#
绑定(bind)可能是一项非常复杂的任务有原生 C
代码。
但我需要对这个主题进行更深入的分析才能做出最终决定。有没有人以前遇到过同样的问题,也许你可以分享你的发现。
这会很有用!
编辑:我说的是这种特殊情况下的视频转换。我需要从用户那里获取视频流并将其转换为一种视频格式供所有人使用。可以调用 ffmpeg
来完成这项工作,一切正常,直到出现问题,我需要重新启动编码或采取任何措施。我无法估计需要多长时间,如果我需要并行转换多个视频,ffmpeg
将不会像我计划的那样灵活...
至少在我看来是这样。在我深入研究的过程中,可能会出现更多问题。
最佳答案
有几个注意事项:
- 你有 dll 的源代码吗?
- 您打算调用这些 dll 多少?
- dll 的 API 有多复杂,您的使用情况如何?
取决于答案。
在以下情况下创建绑定(bind):
- 您会经常调用 dll。直接调用要快得多。
- 你有来源并检查它们有多好。否则,您可能会遇到内存泄漏、调用约定等方面的巨大问题。
- dll 的 API 不太复杂,因此您不需要将 C++ 对象发送给它们等。或者实现很多已经在 exe 中完成的工作。
使用可执行文件:
- 如果您只是偶尔需要运行它们。创建另一个进程的开销对您来说无关紧要。
- 如果您不确定代码的质量。对于您的代码来说,这将更加安全和健壮,而不是加载一些实现不佳的 dll。如果出现问题,您始终可以尝试多次运行 .exe。但如果一个 dll 使您的应用程序崩溃,您将无能为力。
- 如果 API 非常复杂,而 exe 有很多功能,您将不得不重新实现。
关于c# - : Process. 启动还是直接调用DLL哪种方式更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14500106/