0

这是我的设置:我为本地客户端机器编写了一个 .NET 应用程序,它实现了一个也可以在网页上使用的功能。为了使这个例子简单,假设客户安装了一个软件,他可以在其中输入一些数据并取回一些数据。

这个想法是创建一个网页,该网页包含一个表单,用户在该表单中输入相同的数据并获得与上述相同的结果。由于公司有可用的网络服务器,最初的想法是创建一个单一的网络服务,但由于未知原因而被驳回。“服务”不应作为 Web 服务运行,而应由 PHP 脚本调用。这目前是通过从 PHP 中通过 shell_exec 调用单声道应用程序来实现的。

所以现在我被我的应用程序的单声道端口卡住了,它工作正常,但执行时间太长。我已经删除了所有不必要的 dll、方法等,但是通过命令行调用应用程序 - 通过命令行参数提交所需的数据 - 大约需要 700 毫秒。我们预计每秒大约 10 次点击,所以这只能在为此任务设置大量服务器时才有效。

我假设 700m 与每次启动应用程序的成本有关,因为如果我只处理一次或五百次请求(我采用原始输入,稍微改变它并做500 次迭代,每次“新”数据。从第二次迭代开始,处理时间下降到每次迭代大约 1ms)

我的下一个想法是将单声道应用程序设置为远程服务器,这样它只需启动一次,然后就可以处理传入的请求。因此,我编写了另一个作为客户端的单声道应用程序。调用客户端,让客户端将数据传递给服务器并检索结果现在需要 344 毫秒。这更好,但仍然比我预期的要慢得多。

然后,我根据这篇博文从头开始实施了一个新项目,但遇到了同样的性能问题。

问题是:我是否缺少与可以提高客户端/服务器速度的单项目相关的内容?尽管为此任务创建 Web 服务的想法被驳回了,但 Web 服务在这种情况下会表现得更好(因为我不需要客户端应用程序来调用该服务),尽管据说远程处理比 Web 服务更快?


我本可以更清楚地说明这一点,但目前还不能实现 web 服务(请不要问为什么,我没有写要求;))

同时我检查了它确实是客户端的启动,这在远程处理场景中花费了大部分时间。

我可以想象从命令行通过管道访问服务器,这非常适合我的场景。我想这将使用套接字来完成?

4

2 回答 2

3

您可以尝试使用 AOT 来减少启动时间。在 .NET 上,您将使用 ngen 来实现该目的,在 mono 上,只需对应用程序使用的所有程序集执行 mono --aot 即可。

AOT 的代码比 JIT 的代码慢,但具有减少启动时间的优势。

您甚至可以尝试使用 AOT 框架程序集,例如 mscorlib 和 System。

于 2008-09-23T20:17:23.583 回答
1

我相信在这种情况下,远程处理并不是一个理想的选择。但是,您在服务器上安装单声道而不是每次都启动它的想法确实很可靠。

您是否考虑过通过 HTTP 使用 SOAP Web 服务?这也将帮助您处理“网页”场景。

即使以我的经验对您来说有点慢,自定义 RESTful 服务实现也比远程处理更容易使用。

于 2008-09-23T12:41:52.273 回答