【问题标题】:EXE size bloats while using Websocketpp使用 Websocketpp 时 EXE 大小膨胀
【发布时间】:2014-08-04 04:01:59
【问题描述】:

我已经构建了一个非常基本的 EXE,它使用 Websocketpp 客户端,它只连接到 Websocket 服务器,并发送和接收消息。 我用过 VS 2013。

我注意到 EXE 的大小非常庞大。发布版需要 2.3 MB,调试版需要 6 MB。

关于如何减小 EXE 大小的任何想法?

【问题讨论】:

  • 您想要的可执行文件大小是多少?现在 6 MB 并没有那么大。
  • 呵呵。我的测试运行程序是 90MiB
  • 好吧,我同意一个完整的应用程序。但这只是一个非常基本的基本示例。好吧,由于使用了模板,这在某种程度上是可以理解的。我的意思是 Websocket++、boost 和 STL 都是基于模板的。而且模板确实会使代码膨胀。

标签: boost stl visual-studio-2013 websocket++


【解决方案1】:

WebSocket++ 作者在这里。你引用的尺寸似乎是正确的。请记住,像 echo_server(在 linux 上生成约 1MB 的可执行文件)之类的“非常基本的示例”比您根据程序源代码中的约 50 行所想象的要多得多。

任何基于 WebSocket++/Asio 的开箱即用程序都是基于事件的高性能客户端/服务器系统,包括用于 DNS 解析、IPv4 和 IPv6、计时器、SHA1/MD5 散列、base64 编码、UTF8 验证、日志记录、线程的代码URI、HTTP 和多个 WebSocket 协议版本的安全性和解析器。仅仅因为您只使用这些功能来回显消息并不意味着这是一个微不足道的程序。

关于该主题的一些观察/注释:

  1. 由于模板的工作方式,WebSocket++、ASIO 和 STL 的代码被编译到您的程序中,而不是位于外部链接库中。这可能会使 WebSocket++ 或 Asio 程序看起来比链接到外部库的程序更大。

  2. #1 中描述的情况有时会比外部库更有效,因为该程序将仅包含您的代码实际使用的库的部分,而不是所有部分。 IE。如果您不实例化客户端端点,则不会包含客户端代码。如果您的配置禁用 TLS 加密、日志记录或线程安全功能,它们也将不包括在内。同样,由于模板的工作方式,这可以双向进行。例如:一个同时包含客户端和服务器的程序可能会有一些不必要的重复。

  3. WebSocket++ 代码的大小很大程度上与您使用的不同端点配置的数量以及每个配置中启用的选项相关。无论您的程序做什么,它们都代表一个固定的大小。如果你的程序做的很少,它们将占代码的很大一部分。如果你的程序做了很多事情,这个比例就会缩小。

  4. WebSocket++ 是相当模块化的(尽管现在这方面的文档记录较少)。如果您真的关心代码大小(可能是小型嵌入式系统?)并且实际上并不需要 Asio 和 WebSocket++ 开箱即用的所有功能,您可以设置一个自定义配置来删除许多功能或将它们替换为您自己的空间优化实现。

    假设您只需要在没有日志记录的有保证的单线程程序中为一个没有 DNS 查找和安全超时的非 TLS 连接提供服务。您可以基于您的本机操作系统套接字库实现自己的网络传输策略,该库不包含 Asio 所做的所有内容。您还可以删除不需要的锁定/并发和记录器策略。

【讨论】:

    猜你喜欢
    • 2017-07-03
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2011-09-23
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多