代码之家  ›  专栏  ›  技术社区  ›  RED SOFT ADAIR

.NET给了我什么,而Win32却没有?

  •  13
  • RED SOFT ADAIR  · 技术社区  · 16 年前

    NET的使用会给我什么,我没有使用Win32-有时可能谷歌搜索一些50-100行代码,我可以重用?

    我正在开发Win32,因为它存在(15年)。它的直截了当和非常健壮,虽然有时它需要比您预期的更多的调用,当然您需要跟踪句柄等,但我们的(250.000 LOC)应用程序安装在不到1分钟,它很少有任何兼容性问题。

    我已经关注了一些关于.NET与Win32的讨论。 Win32 vs .Net ). 但他们不回答这个问题。

    14 回复  |  直到 9 年前
        1
  •  24
  •   Community Mohan Dere    11 年前

    答案很简单:更高层次的抽象和与幕后“真实”事物的脱钩。这就是为什么.NET可以在其他操作系统上实现。

    事实上,如果没有.NET,这一切都是可能的,但这是不可行的。简单示例:NET中的WCF为您提供了一个人人都可以使用的一流IPC和SOA框架。它是内置的功能。在win32中,您可以使用第三方库或其他方式获得相同的自编码。用户群很小,你没有那么大的社区支持你的问题,而且很难实现。.NET框架为您提供了开箱即用的功能。

    对于大量的应用程序,.NET将加快开发时间,使开发更加便宜。

    对于特殊类型的应用,情况正好相反。用.NET开发实时应用程序几乎是不可能的,因为二级GC冻结了所有线程。

    补充的:
    .NETFramework4.5包含一个增强的垃圾收集器。它为服务器垃圾收集器启用多线程后台垃圾收集(使用app.config中的<gcServer>元素启用),而不会冻结应用程序线程。

    不幸的是,Mono垃圾收集器并没有那么先进,所以基本语句对于Mono来说仍然是正确的。

        2
  •  15
  •   MarkJ    16 年前

    只有开发Win32超过15年的人才能称之为简单和健壮。如果您愿意自己编写整个250000行代码而不是使用组件,那么您的应用程序将很容易安装。我不确定折衷是否一定值得。

    由于种种原因,.NET给你的是更快的开发。更高的抽象性,优秀的组件,没有指针问题,不需要管理自己的内存或句柄。如果你已经开发Win32 15年了,也许你不需要这些。你有没有雇佣过新的初级程序员?我相信他们会比Win32更快地学习.NET。在你说“你好世界”之前,Win32还有很多东西要学。

        3
  •  6
  •   Stack Overflow is garbage    16 年前

    使用方便。与.NET框架的其他部分(与Win32无关的部分)轻松互操作。

    .NET没有什么神奇之处,它只是大量的预定义类,用于轻松地执行常见任务。其中许多任务都是类似“创建窗口”或其他Win32功能的东西。

    至于Win32是“直截了当和健壮的”,我不这么认为。

    下面是一个很好的例子:程序员将需要的最基本的功能之一:检索与刚刚发生的错误相关联的错误消息:

    http://msdn.microsoft.com/en-us/library/ms679351%28VS.85%29.aspx

    • 7参数
    • 要读取两个表以了解参数
    • 要考虑的安全备注
    • 必须调用特殊的特定函数(LocalFree)以释放系统分配的缓冲区。

    只是为了实现这个简单的功能?这就是“直截了当”?

    Win32 API是最糟糕的设计、最复杂和难以使用的(至少正确的)API之一。它唯一能始终如一地做到的就是让简单、直观的用法出错,并且需要大量的步法来实现正确性。

    但当然,任何花了十年时间使用API的人都已经面临这些问题,并且已经习惯了这些问题。对你来说可能没问题。更好的是,既然你已经有了你的申请,你还是坚持吧。没有理由扔掉它重新开始.NET

    但是 如果 你今天白手起家,然后

    • 在.NET中,学习曲线会友好得多(但是,如果你已经过了学习曲线,那就不那么重要了)
    • 在.NET中,错误的范围将缩小(以“错误”的方式调用函数要困难得多,即使这样,也可以减少不好的事情的发生)
    • 找新的程序员加入你的团队会更容易
    • 大多数人在C语言中比C或C++更有效率。NET提供的一个主要功能是使用.NET语言。相比之下,类库可以被认为是锦上添花。
        4
  •  6
  •   Adrian Grigore    16 年前

    在ASP.NET或ASP.NET MVC切换到Web开发之前,我在C++开发了大约8年的游戏。从我的观点来看,当使用.NET代替本地C++代码时,这些是最重要的优点:

    • 非常好的IDE工具。Resharper比VisualAssist能做的更多
    • 不再有无效/空指针错误或内存泄漏问题
    • 具有比Win32更好的API的可靠运行时
    • 许多伟大的开源.NET库,超过了我能找到的C++(即使没有c++升压)
    • 多亏了莫诺河,把你的软件移植到另一个PATTHORT比用C++更容易。
        5
  •  6
  •   Doug McClean    16 年前

    两个字的总结:

    Garbage collection .

        6
  •  2
  •   Pop Catalin    16 年前

    WinAPI用于在最底层与Windows交互,它涵盖了Windows操作系统向用户提供的所有功能。

    .Net是一个框架、一个运行时和一个大型库集合,这些库服务于不同的目的并抽象Windows API。它基本上提供了隐藏windows API的OO抽象。

    如果你使用.Net 仍然 透明地使用WinAPI,如果您选择通过PInvoking进入本机API,则可以直接使用它。

    是否选择.Net而不是WinAPI取决于要生成的应用程序的类型。如果它是一个重外壳集成的应用程序,那么使用WINAPI,如果不是,但是您需要使用Post XML、连接(WCF)、图形(WPF)或数据访问(ADO.NET、LINQ)库,并且需要生产力提升.NET提供和交易过一些灵活性(您需要确保.NET在目标计算机上运行),这已经不是什么大事了)不是问题,然后选择了.Net。

        7
  •  2
  •   Vilx-    16 年前

    .NET本身实际上包装了Win32API,因此原则上,使用.NET不能做任何使用Win32API不能做的事情。NET的优点是易于开发,这也意味着更快的交付和更少的bug。NET中的调试功能也要好得多。

    NET的安装速度和运行速度并不是什么大问题。你可以用任何语言编写糟糕的软件,就像你可以用任何语言编写好的软件一样。在.NET中有不同的技巧和窍门,而不是C++中的技巧(因此这是一个学习曲线),但最终两者都是一样好的。

    我甚至听到一个谣言,一个写得好的C语言程序实际上可以比一个等价的C++程序快,因为JIT编译器可以优化特定CPU的程序集,而C++优化器只能进行一般的优化。我不知道这是不是真的。

    .NET软件的兼容性也类似于C++。一方面,它要求安装.NET框架,但另一方面,由于强名称和GAC,不再需要DLL hell。很多东西已经在默认安装中,通常你需要C++中的第三方库(比如XML解析、DB连接、SOAP Web Services、RPC等)。

        8
  •  2
  •   Nemanja Trifunovic    16 年前

    如果不了解应用程序的性质,很难回答这个问题。如果它是一个典型的内部业务应用程序,具有大量的数据库访问和报表生成功能,我会说.NET给我们带来了很多好处。如果是游戏,图像处理,或者一般来说是你卖给广大客户的东西,我会坚持使用Win32。

        9
  •  1
  •   MSalters    16 年前

    .NET使您能够用真实语言编写Sql Server存储过程。尝试在Win32 DLL中执行此操作。

        10
  •  0
  •   smok1    16 年前

    一些优点:

    1. 使用方便。在Win32 API中,每个调用都应该有大量的初始化代码。初始化之后,您通常必须使用一些标志调用API方法,以了解需要什么以及如何为该调用分配缓冲区,然后使用其他参数再次调用该API方法来实际执行该任务。毕竟,有一些清理代码。在.NET中,您通常只需调用一些方法,因为所有混乱的内容都隐藏在内部。

    2. .NET远远高于WinAPI。所以,现在框架是用WinAPI编写的,但几年后(比如Windows 9?)内核将公开的是.NET框架。遗留应用程序将使用一些用.NET框架编写的遗留转换器WinAPI。

        11
  •  0
  •   Wim ten Brink    16 年前

    当我在开发MS-DOS应用程序时,我还想知道Windows开发的一些类似的东西。Windows很有趣,但我觉得DOS更实用。也就是说,直到我开始编写Windows应用程序并注意到Windows API非常有用。我在Windows中使用的RAD环境(Delphi)使我很容易为我的应用程序开发一个漂亮的GUI。对于Borland Pascal,虽然Turbo Vision确实为DOS提供了一个非常有用的环境,但这有点复杂。 大约8年前.NET被引入时,我认为它是一个用于Windows应用程序的大型运行时库,就像Windows本身是一个用于MS-DOS的很酷的图形库一样。这不是一个银弹或金锤打击你的问题,以解决方案。它只是让开发变得更容易的东西。

    不过,当我将Windows应用程序与MS-DOS进行比较时,我仍然觉得DOS更加健壮。但是窗户让我更容易做到。当您将.NET与WIN32进行比较时,同样适用。事情变得更容易发展了。

        12
  •  0
  •   Jon Cage    16 年前

    除了你已经提出的观点。。

    • .NET不依赖于平台(在 mono 它将在Windows、Linux、OS X、BSD等系统上运行。)
    • 你可以在VB、C、C++等中编写.NET代码,并用不同的语言编写模块,一起工作,不需要太多的痛苦。

    实际上,我想你会发现.NET包含了很多win32功能。

        13
  •  0
  •   user167971user167971    16 年前

    我发现VisualStudioExpress 8中的表单编辑器总是在我用.NET编码C++时崩溃整个IDE。当我用普通Win32做C++时,这种情况不会发生。当我使用.NET和C#编写表单时,不会发生这种情况,因此我被迫不再使用.NET,除非使用C#。

        14
  •  0
  •   Zan Lynx    16 年前

    像.NET这样的虚拟机非常适合跨平台编码。如果不向.NET以外的函数发出任何非托管调用,则它可以在支持.NET的任何地方运行。

    就像X-Box 360。或者Windows CE/Mobile/Whatever。

    这对微软和Windows开发人员来说将是一件好事,因为使用类似于ARM的CPU,低功耗设备将更加高效。手臂是 将运行您的IA32 Windows应用程序,但它将在MS通过building.NET for ARM WinCE后运行您的.NET应用程序。

    当然,Java也会这样做,而且如果您希望这样做的话,它在跨平台支持方面会更好、更成熟。