2011-01-14 34 views
1

如何测量C#程序的大小?如何测量C#程序的大小

假设我有

class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Hello World"); 
      Console.ReadKey(true); 
     } 
} 

如何衡量有多少字节的程序采取了?

谢谢

+7

如果你能定义“程序占用了多少字节”的意思,这将有所帮助。在您可以测量数量之前,您必须对其进行定义。 – 2011-01-14 10:02:41

+0

您是否需要考虑程序所依赖的.NET Framework的大小? – 2011-01-14 10:03:55

回答

4

这会给你以字节程序的可执行文件的大小从您的程序中:

FileInfo fi = new FileInfo(Assembly.GetEntryAssembly().Location); 
Console.WriteLine(fi.Length); 

否则你可以浏览到资源管理器可执行文件的bin文件夹并查看文件属性的大小。

4

编译它并检查编译的文件的大小?

0

也许这样的事情会工作?

FileInfo fInfo = new FileInfo(Application.ExecutablePath); 
long size = fInfo.Length; 
MessageBox.Show(size.ToString()); 
1

当一个程序被编译时它将是一个特定大小的可执行文件。程序越大,代码越多。当程序运行时,大小通常是它在操作过程中使用的内存量。

当程序执行时,电脑会分配内存给“加载”程序。此加载过程可能需要其他.Net框架DLL或第三方DLL。当程序第一次加载时,加载过程通常会消耗相当一致的内存量。多少内存取决于程序大小和框架或第三方DLL。 .Net擅长加载JIT(Just in Time),这意味着某些DLL可能在需要时才会被加载。

在运行程序的过程中,.Net会分配项目进入堆栈。当方法和函数相互调用时,它们被放在堆栈上,当方法和函数调用结束时,堆栈展开。例如,递归函数可能会在堆栈上放置100次,并且如果递归太深,最终会耗尽内存。这个“堆栈”是内存的动态分配,取决于应用程序所做的方法和函数调用。调用越深入,堆栈中的项目越多。这将影响程序使用的内存大小。

拼图的另一部分是堆。动态分配放在堆上。这些通常是您的程序当前使用的数据结构。由于.Net具有垃圾收集功能,.Net程序员不必担心这种内存管理。当项目被放置在堆上并被使用时,程序的大小(内存使用方式)会增长,然后垃圾收集会每隔一段时间检查一次以清理干净。例如,您可能有一个将1 GB XML文件读入内存的程序。你的程序大小可能只有30K,但是因为整个文件都被读入内存,所以你的程序的大小现在超过1Gig(内存明智)。可以使用工具来监视程序的内存使用情况,以验证它是否正常工作。 .Net中的大部分内容都是垃圾回收,因此不需要担心内存分配的“大小”(除非您正在将大文件读入内存中!),但非托管资源仍需要考虑并清理为需要。非托管资源的例子有数据库连接,文件句柄等.Net C#有一个很好的USING语句,可以自动调用Dispose来处理非托管资源(只要你注意到了这一点),你的程序应该没有任何托管或非托管泄漏。

所有这些在编译时和运行时都会影响程序的大小。程序越大越复杂,通常磁盘上的尺寸越大,运行时的内存使用量越多。