【问题标题】:Windows Mobile development: C++ or C# -- which one is better? why?Windows Mobile 开发:C++ 或 C#——哪个更好?为什么?
【发布时间】:2011-01-22 09:25:36
【问题描述】:

在进行 Windows Mobile 开发时,我应该使用哪种语言? C# 或 C++ 还是其他?为什么一个人比别人好?

【问题讨论】:

    标签: c# c++ windows-mobile


    【解决方案1】:

    这取决于你在编码什么。

    可以通过 C# 中的 P/Invoke 对操作系统进行本机调用,但通过本机 C++ 可能更容易进行广泛使用。您还需要 C++ 才能使用 Compact Framework 未封装的一些硬件。

    大多数硬件(GPS、相机等)都可以通过 CF 获得。如果您使用的是 Win Mobile 6.x 设备,那么使用 C# 可能会更好。除了硬件,Pocket Office (POOM) 对象模型也可用于 C#,因此您可以与之集成。

    值得注意的是,大多数对 Windows Phone 7 的引用都指代托管代码和 Silverlight 的可能性。混合使用 Silverlight,您将不得不使用 C# 进行编码。

    除非您的应用具有高性能或对内存非常吝啬,否则请使用 C# 或 VB.NET。

    斯科特

    【讨论】:

    • 顺便说一句,Silverlight 并不一定意味着 C#。例如,CE 6.0R3 有一个完整的“Silverlight”XAML 引擎,它只能在 C++ 中使用。
    • 没错——Silverlight 可以用 VB.NET 编码,但不能用 C++ 作为目标,所以在这种情况下,使用 C# 就是答案。 Win CE 6.x 的 Silverlight 实现非常酷,但 Win Mobile 是 CE 的不同版本,目前没有 Silverlight 实现。
    • 我的意思是,我们不知道 WinPhone 的 Silverlight(如果有的话)是托管的还是基于 C++ 的。我们不能忽视它可能是 C++,因为已经为 CE 设定了一个先例,即 Silverlight 是在 C++ 中完成的。
    • 从现有的少量信息来看,原生 Windows Phone 7 系列开发将非常有限,Silverlight 和 XNA 将是主要的表示层,使用托管 .NET 代码来完成举重。
    • @ctacke:据我所知,WP7 与 Windows CE 无关。与其说是 Windows Mobile,不如说是 Zune。
    【解决方案2】:

    主要看任务。

    c++ 有以下优点/缺点:

    • 直接访问资源,更快的程序
    • 可以访问非常深的操作系统部分,高级应用不需要
    • 更难开发,需要开发者管理资源

    C#:

    • 在虚拟机 (CLR) 下运行,这就是速度较慢的原因
    • 更快、更轻松的应用程序开发
    • 丰富的内置库

    【讨论】:

      【解决方案3】:

      视情况而定。

      至少呈现一个特定的用例。并可能使用 SO 搜索? :)

      C++ or C# to program mobile barcode device?

      编辑: 显然,其他人的平局速度更快,并且给出了更清晰的答案。尽管如此,我仍然建议阅读上面的 SO 线程。

      【讨论】:

        【解决方案4】:

        对此没有正确答案,因为没有万能的“更好”定义。如果您了解 C++ 并且已经拥有大量 C++ 代码资产,那么 C++ 肯定看起来很有吸引力。如果你知道 C# 而不是 C++,那么 C# 看起来确实很吸引人。

        C++ 应用程序加载速度更快,但对于许多应用程序来说,这并不重要。 C# 应用程序当然可以更快地编写,但它们也没有确定性。我什至再也不会尝试使用 C++ 编写 UI,也不会考虑使用 C++ 进行数据库访问。不过,我不会用 C# 编写驱动程序,也不会编写 shell 扩展。

        一般来说,我提供的大多数解决方案都是两者的混合。 C# 有它的优势。它的编写速度很快,更易于调试和单元测试,很难(尽管并非不可能)造成泄漏,并且对于某些操作(如数据访问或 XML 解析)来说,它更容易。

        C++ 也有它的优势,比如执行速度(尽管 C# 可以在很多事情上运行得一样快)、确定性和插入需要本地入口点的东西的能力。

        所以我的回答?您需要同时了解两者,并且可能会同时使用两者来编写您的解决方案。您最终使用的百分比取决于您的最终目标。

        【讨论】:

        • 您可能还会发现坚持使用 C# 在更多移动项目中很有用 - Mono Touch (monotouch.net) 让您可以用 C# 编写 iPhone 应用程序,他们正计划发布针对 Android 手机的版本(称为 Mono Droid),虽然 Mono Droid 尚未发布。使用 C# 比使用 C++、Objective-C 和 Java 更容易。
        • 也许在理论上,但 CF 中的大量 WinMo 代码是 CE 专用的,使用 Microsoft 的 WIndowsMo​​bile 命名空间或 P/Invoking 到 coredll。任何类型的重用可用性都非常低,并且 UI 元素也有很大不同。由于这些原因,我不会说 C# 在这些平台上比 C++ 更便携。
        • 智能手机的核心服务肯定是独一无二的,但我仍然认为你有更好的机会在所有三个平台上利用 C# 3.0 代码。例如,iPhone 上的 UI 特定内容是通过 C# 包装的。当然,这些包装器与 Windows Phone GUI API 不同,但我认为坚持使用 C# 比学习适用于 iPhone 的 Obj-C 和适用于 Android 的 Java 更容易。算法不一定受平台限制。
        【解决方案5】:

        根据我的经验,c#比较容易上手,如果compact框架提供的api对你来说足够了,那你就ok了。

        另一方面,如果您的项目有些复杂,或者如果您想做一些不在紧凑框架中的事情,您可能最终需要在 c++ 中创建一个帮助程序 .dll。即使在这种情况下,您也可以在 c# 中编写主程序,并在 c++ 中编写 helpers dll。

        如果您直接使用 c++ 进行编程,您可能会受益于原始性能比 c# 更好的事实,如果您正在玩游戏,这很好。

        但是您也会受到 windows mobile 操作系统的限制。比如每个进程最多 32MB,或者所有 .dll 共享相同的地址空间。

        所以最终这真的取决于你打算做什么以及你拥有的经验。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-04
          • 2011-04-29
          • 1970-01-01
          • 2020-04-27
          • 1970-01-01
          • 2017-01-07
          • 2011-04-13
          相关资源
          最近更新 更多