我的所有应用程序都是使用Native Code开发的。由于我听到的所有负面消息,我对于转移到.Net犹豫不决,例如:
等。等
非常感谢您的建议。
答案 0 :(得分:8)
不要仅仅为了转换而这样做。
如果您有其他技术原因要转换,那么您应该考虑它,但要注意这不是一个小改动,特别是对于大型项目。
编辑:我还想补充一点,如果你在.NET中开始一个小项目会更好,只是为了知道会发生什么,然后决定现有项目的转换是否有效。
答案 1 :(得分:6)
你的所有三点都至少有点真实,虽然'1'非常模糊 - 琐碎的.NET应用确实比原生应用程序的启动时间更长 - 也许这就是你的意思?
在某些情况下,Mono是对点'2'的缓解。
MS已经明确地解决了点'3'的问题,但是我认为它们逐渐得到了解决,互联网速度的普遍提高意味着人们对梅格的几十年的关注远远少于5年前对我来说,最大的问题是几乎所有关于C#编程的东西都比C ++好得多(我是一个铁杆C ++人,有一堆Meyers和Alexandrescu书籍),当你必须回到C ++感觉就像冷水淋浴。
答案 2 :(得分:2)
响应时间慢可能是错误的。您基本上被锁定在Windows中(除了Mono,这还不成熟),并且您依赖于运行时。也就是说,运行时通常已安装在大多数系统上(尽管如果失败,您必须确保并提供安装它的方法)。
我的问题是,为什么要切换?如果您已经拥有本机代码,那么移植工作将会非常困难。您的整个开发团队也需要学习新的.net语言。你需要一些陡峭的优势来切换,以克服切换到任何语言的障碍,更不用说.net。
答案 3 :(得分:1)
这取决于几个因素。
您的申请是否需要重写? .Net的优势需要多长时间才能抵消重写的成本? Windows锁定是否存在问题?
.Net是一个很棒的平台,但不适合所有人或每个项目。我会说,当.Net是新的时,运行时问题是一个更大的问题,在这一点上已经变得相当微不足道IHO。
答案 4 :(得分:1)
无论第1点和第2点如何,我都不会担心.NET运行时 - 这些天我很少遇到没有安装它的机器。
至于反应迟钝,我没有这种经历。我想你可以用任何语言写一个缓慢无响应的应用程序。 .NET远远不是最糟糕的,使用它对开发人员来说有很大的好处。
但是,作为一项规则,我从来没有真正坚实的理由重新发展。将您的应用程序更新为最新且最好的可能听起来是一个好主意,但通常会导致很少的时间损失。
答案 5 :(得分:1)
重写您的应用程序可能没有令人信服的理由。性能和更小的内存占用将是应用程序持续的优势,任何任何生产力增益可能远远超过移植成本。
从新的应用程序切换到.Net可能会有一些里程。与C ++相比,它会更高效,代价是运行时依赖性,内存占用增加和性能损失。
您还可以选择使用混合系统,将.Net前端放在用C ++编写的后端,以提高速度或控制内存消耗。内存消耗可能是我最大的消耗。经历了使用大型托管代码应用程序(Oracle Warehouse Builder和BIDS)的乐趣,其中应用程序使用了近半个GB的内存,这些应用程序的性能是透明的,即使在高规格的现代PC上也是如此。 p>
在这种情况下,控制内存使用(以及相关的CPU缓存抖动),垃圾收集的时间和更简约的数据结构将是性能上的胜利。
答案 6 :(得分:1)
切换到任何不同的开发语言或框架的开销非常高。在下列所有情况都成立之前,我不会这样做:
因此,这与.NET无关。但假设您决定切换(和.NET),我不会担心缓慢的响应时间或.NET运行时的可用性。这对我的B2B应用程序来说都不是一个重大问题。
但如果你不想这样,Windows锁定肯定会成为一个大问题。
答案 7 :(得分:1)
如果您对本机代码感到满意,那么您的决定权归于何处?
就个人而言,我不会错过我的C ++时代(MFC,COM等,对于生产力imho来说真的没有做太多)。我发现.Net和C#提供了很好的工具和功能组合。我可以轻松地构建实际看起来和感觉像常规Windows应用程序的Windows应用程序。
我也很高兴C#提供了我喜欢的OO和声明性编程的有趣组合。框架不完整,但有很多功能仍在增加。
.Net最有趣的部分可能是针对该平台的不同语言数量不断增加。我欢迎添加IronPython和IronRuby,据我所知,它将成为Visual Studio的下一个版本的一流.NET语言。
答案 8 :(得分:1)
您的应用程序不应该明显变慢,但是如果在终结器队列中留下太多对象,GC可能会导致执行中的瞬间中断(.Net GC不是异步)。从技术上讲,.Net应该和本机代码一样快,但我已经阅读了几次,但事实并非如此:但同时它只是略微慢一点(仅在学术或实时情况下相关,如他们所说)。 / p>
至于更长的启动时间,你可以使你的程序集。这会将程序集预编译为本机代码,因此在第一次访问方法时不会产生JIT编译的成本(请记住,JIT仅在第一次调用方法时编译,而在应用程序是运行)。
我不认为.Net运行时应该是一个问题:特别是如果你的目标是.Net 2.0。 Windows XP SP2附带.Net 2.0,因此任何负责任的客户都不应该有任何问题。
一旦他们的PC上有框架,你编译的程序就是 TINY (当你只编写1000行代码来获得一个小于1亿的DLL时,它实际上是令人沮丧的)。如果您使用一键式部署,更新的成本也非常小(如果您在适当的程序集中遵守纪律和shell功能)。
答案 9 :(得分:1)
如果您拥有大量有价值的C ++代码,那么在这种转换中就有一种感觉。使用Microsoft C ++ / CLI,您可以围绕您的本机代码创建.Net包装类,并将此库出售给其他.Net开发人员;)