我正在使用.NET 4运行Windows Vista和Visual Studio 2010。 2 GB内存和大约800 MB免费。
我创建了一个Windows窗体应用程序并且没有添加任何代码。只需在发布模式下编译它,关闭Visual Studio并启动应用程序。如果我查看任务管理器,应用程序会生成3500页错误,只是为了启动而不执行任何操作。
如果我创建一个控制台应用程序并只添加Console.ReadLine();
以使其保持打开状态,则会生成1500页错误。
这是.NET的正常行为吗?这些数字对我来说似乎太高了。
答案 0 :(得分:32)
您必须了解.NET应用程序的代码多于您编写的代码。它必须加载程序集,解析它,编译它,执行它,然后加载到各种支持库等等。(其中一些可能需要类似的解析,编译等...),所有这些都会产生页面错误。在宏伟的计划中,3,500并不是那么多的页面错误。
作为一个例子,我尝试了一些“简单”的控制台应用程序。更多,从控制台运行,产生750页错误,这是一个非常小的应用程序,它只是从一个输入回显到另一个输入。它是用C语言编写的,一种不是垃圾收集的语言,没有虚拟机,或者必须附带的大型运行时库(它是静态链接的,所以它不依赖于运行时)。
鉴于.NET所做的一切,只使用1,500页错误执行ReadLine的单行控制台应用程序似乎非常好。
我甚至不确定你为什么关心页面错误。也许你来自一个页面错误是坏事的平台。在Windows中,进程是“页面支持”,这意味着操作系统内存映射可执行文件,然后根据需要加载页面(这包括共享库,以及可执行文件本身,图标,图像,各种事物)。当操作系统需要将它们加载到内存中时,每个页面都会生成页面错误。这是正常的,这就是操作系统的工作方式。
答案 1 :(得分:5)
我不认为.NET的目标之一就是创建一个“Hello,World!”应用资源最少。 .NET在启动时做了很多工作,超越了“Hello,World!”。应用程序和运行业务应用程序,在资源使用和开发时间之间进行权衡。
结论:.NET在小型应用程序上使用大量资源(内存,页面错误等)是正常的。在创建“普通”应用程序时,事情会正常化,但它仍然会消耗比简单C或汇编程序更多的资源。