【问题标题】:Does Signing an exe makes the communication slow?签署exe是否会使通信变慢?
【发布时间】:2012-02-07 06:04:27
【问题描述】:

场景

我有一个 C# 可执行文件,使用强密钥签名。从这个 C# 应用程序中,我使用“pinvoke”调用 C++ 可执行文件(未签名)。我观察到 C++ 可执行文件的执行有很大的延迟。这有什么原因吗?

【问题讨论】:

  • 您在不使用签名的可执行文件时是否观察到相同的延迟?
  • 不。使用未签名的 exe 时,速度要快得多
  • 您的可执行 Authenticode 签名了吗?
  • 我运行一个签名的 exe 并调用非托管代码,我从未遇到过这个问题。

标签: c# c#-4.0 c#-3.0 pinvoke assembly-signing


【解决方案1】:

请参考How do I strongly name an Unmanaged C++ Dll的邻居回答

一般来说,程序集的强名称只是一个校验和,没有人更改/入侵/注入您的代码(注入可能是病毒或木马应用程序之类的东西)。对代码的保护不是很安全,这就是为什么它不需要很多时间来完成所有的汇编测试。与简单的汇编相比,加载签名的代码肯定会花费更多时间。

另一方面,PInvoke 就像一个 Web 服务调用,其中 .Net 代码不介意该代码是否安全。只有当您有很多参数时,才会出现延迟,并且参数类型来自一些大型签名程序集的一些第 3 方结构。在这里你可能会看到一些小的时间延迟,因为那些大的程序集被加载到内存中,类型被检查,并且 PInvoke 被创建。

也许,您应该尝试将所有类和结构从许多程序集中移到一个,并在那里使用 PInvoke。因此,在这种情况下,您不需要加载许多程序集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    相关资源
    最近更新 更多