在大型图书馆工作的提示?

时间:2020-03-05 18:46:07  来源:igfitidea点击:

我目前正在开发一个非常大的库(在VS2005下使用C ++编写的500万行代码,有1个解决方案和近100个项目)。即使我们分发编译并使用增量链接,在对源代码进行较小的修改后,重新编译和重新链接也需要几分钟(通常至少3分钟)到将近一个小时的时间。

这意味着我们的修改代码/构建/调试周期通常非常长(按我的口味!),并且在构建过程中很容易丢失"流程":通常没有太多时间来做任何有用的事情(也许一点电子邮件,否则在线阅读一些文章或者一本书的几页)。

在编写新代码或者进行重大重构时,我尝试一次只编译一个文件。但是,例如在调试期间,它确实让我感到不安!

我想知道如何优化时间?我想我不是那种情况下的唯一人:你会/会做什么?

解决方案

回答

我对该级别的开发了解不多,但是...分离为多个解决方案似乎是一个好主意。如果我们/客户确实坚持,那么我们可以进行最后的"发货前"步骤,将它们全部合并为一个.dll。

例如,与.NET Framework进行比较,在该框架中我们有很多不同的程序集(System,System.Drawing,System.Windows.Forms,System.Xml ...)。大概所有这些可能都在不同的解决方案中,它们相互引用了构建结果(与单个解决方案中的所有结果相反,它们相互引用为项目)。

回答

@Domenic:确实,这将是一件好事...但是,整个团队已经忙了一段时间,直到他们获得成功,我们仍然只使用一个.dll和一些非常单一的东西:-(

回答

一步步...

唯一的解决方案是开始隔离代码块。如果我们没有太多的实现泄漏(请参阅下面的**),那么请开始构建fachades,以隔离后面的类。将这些小节移至其他项目,并让fachade在启动时加载dll,并将调用重定向到工厂方法。

着重于找到相当稳定的区域/库,并将其拆分为隔离的库dll。分别构建和版本化它们将避免集成难题。

我过去一直在处理这种情况,唯一的办法是耐心地完成任务。

顺便说一句,拆分代码的一个很好的副作用是接口变得更整洁,输出的dll大小更小!!在我们的项目中,对代码进行改组/重组并减少了不必要的数量,包括将最终输出减少了30%。

祝你好运!

**->调用obj-> GetMemberZ()-> GetMemberYT-> GiveMeTheData(param1,param2)的使用者