我已经构建了一个非常基本的EXE,它使用Websocketpp客户端,它只连接到Websocket服务器,并发送和接收消息。 我用过VS 2013.
我注意到EXE的大小是巨大的。它类似于发行版的2.3 MB和调试版的6 MB。
关于如何缩小EXE大小的任何想法?
答案 0 :(得分:5)
WebSocket ++作者在这里。您引用的尺寸似乎是正确的球场。请记住,一个非常基本的样本"比如echo_server(它在linux上产生大约1MB的可执行文件)比基于程序源中的~50行所做的要多得多。
开箱即用的任何基于WebSocket ++ / Asio的程序都是基于高性能事件的客户端/服务器系统,包括DNS解析代码,IPv4和IPv6,计时器,SHA1 / MD5哈希,base64编码,UTF8验证,日志记录,线程安全性,以及URI,HTTP和多个WebSocket协议版本的解析器。仅仅因为你只使用这些功能来回复消息并不能使这成为一个简单的程序。
关于该主题的一些观察/说明:
由于模板的工作方式,WebSocket ++,ASIO和STL的代码被编译到您的程序中,而不是位于外部链接的库中。这可能使WebSocket ++或Asio程序看起来比链接到外部库的程序人为地大。
#1中描述的情况有时最终会比外部库更有效,因为该程序将只包含代码实际使用的库部分,而不是所有部分。即如果您未实例化客户端端点,则不会包含客户端代码。如果您的配置禁用TLS加密,日志记录或线程安全功能,则它们也不会包含在内。再次由于模板的工作方式,这可以双向进行。例如:包含客户端和服务器的程序将有一些可能不必要的重复。
WebSocket ++代码的大小主要与您使用的不同端点配置的数量以及每个配置中启用的选项相关。无论您的程序做什么,它们都代表一个固定的大小。如果你的程序很少,它们将占很大比例的代码。如果你的程序做了很多,那么这个比例会缩小。
WebSocket ++是相当模块化的(尽管现在这个文档记录不多)。如果您真的关心代码大小(可能是小型嵌入式系统?)并且实际上并不需要Asio和WebSocket ++开箱即用的所有功能,您可以设置一个自定义配置,删除许多功能或替换他们使用您自己的空间优化实现。
假设您只需要在没有DNS查找的情况下为一个非TLS连接提供服务,并且在没有记录的保证单线程程序中没有安全超时。您可以基于本机OS套接字库实现自己的网络传输策略,该套接库不包含Asio所做的所有事情。您还可以删除您不需要的锁定/并发和记录器策略。