我一直很欣赏原来的uTorrent程序.它看起来很棒,不到64kb,非常快,并且拥有我需要的所有功能.不幸的是,该程序是封闭源程序(并且当天变得更加臃肿)所以我来到Stackoverflow获取灵感.
在Windows上编写快速,内存高效且优雅的程序时,您建议使用哪些方法?
虽然C#(以及整个.NET概念)都是很酷的想法,但我更感兴趣的是"纯粹主义"的答案以及为Windows平台编写高效,快速软件的挑战,就像最初的uTorrent客户端一样.我不介意分配自己的内存,做我自己的垃圾收集和创建自己的数据结构.
关于书籍,文章,图书馆,IDE的建议(甚至是将更多咖啡因纳入我的系统的有效方法)也受到欢迎.
Eri*_*ric 17
Windows模板库面向您想要做的事情.它是Win32 API的轻量级,基于模板的C++包装器.有了它,您不必经历直接Win32编码的痛苦,但它不会像MFC那样增加很多开销.
如果你想针对尽可能小的内存占用进行优化,并且你不介意跳过.NET CLR发明的一堆箍来为你照顾,那么编写一个直接的Win32API应用程序并挂钩到GDI +是这样的去.Petzold是最终的参考.
但实际上,这是一个傻瓜的差事,因为无论你的应用程序是否使用它,.NET运行时都会加载到操作系统的内存中,所以你也可以链接到它.
常规:对于较小的可执行文件,#define WIN32_LEAN_AND_MEAN和VC_EXTRALEAN(假设为VS).不要使用调试符号进行编译(您可能知道这一点).使用更少的库,用户只需链接您需要的库部分(VC的链接器非常好用,但如果可以帮助它,请不要触摸optlink).
剥离重定位标头:转到http://www.paehl.de/cms/oldtools并搜索"ReduceEXE"(直接下载链接:http://www.paehl.de/reduce.zip).
运行一个可执行的打包程序:http://upx.sourceforge.net/ ...它在运行时耗尽了更多的内存并开始慢一点,但文件要小得多.
如果您关心文件大小超过速度,VC可以选择"优化大小",这会关闭循环展开和函数inling等功能.
如果你想去硬核(并不关心所有的软件工程优势),尝试使用更少的类,而不是更喜欢没有虚函数的POS类型.维基百科建议,程序执行时间的6-13%用于虚拟呼叫.此外,vtable本身占用(一个LITTLE)内存,并且在每个类实例的开头(具有虚函数)的size_t值内存被分配给vtable指针.IOW,"纯C"最终会稍快一些(尽管如果你发现自己用函数指针模拟类,请回到C++).
旧的"LIBCTiny"技巧仍然有效.使用现代VC++版本,您可能需要转换一些功能.
另一个要知道的好方法是lstr*在Kernel32中收集函数.那已经在记忆中了,所以这些功能可能是一个更精简的选择.
| 归档时间: |
|
| 查看次数: |
8856 次 |
| 最近记录: |