如何衡量C#程序的大小

时间:2011-01-14 10:00:59

标签: c#

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

假设我有

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

如何衡量程序占用的字节数?

由于

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

这将为您提供程序内部程序可执行文件的大小:

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

否则,您只需浏览到资源管理器中可执行文件的bin文件夹,然后查看文件属性中的大小。

答案 2 :(得分:2)

编译程序时,它将是一个特定大小的可执行文件。代码越多,程序就越大。运行程序时,大小通常是它在运行期间使用的内存量。

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

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

另一个难题是堆。动态分配放在堆上。这些通常是程序当前使用的数据结构。因为.Net有垃圾收集,所以.Net程序员不必担心这种内存管理。当项目被放置在堆上并使用时,程序的大小(内存使用方式)会增长,然后垃圾收集会经常检查以清理内容。例如,您可能有一个程序将1 Gig XML文件读入内存。您的程序大小可能只有30K,但由于整个文件被读入内存,因此程序的大小现在超过1 Gig(内存方式)。可以使用工具来监视程序的内存使用情况,以验证程序是否正常运行。 .Net中的大多数东西都是垃圾收集的,所以人们不需要担心内存分配的“大小”(除非你正在将大型文件读入内存!),但是非托管资源仍然需要考虑并清理为需要。非托管资源示例是数据库连接,文件句柄等.Net C#有一个很好的USING语句来自动调用Dispose来处理非托管资源(提供IDisposable已实现),所以只要你小心这个,你的程序应该没有任何管理或非管理泄密。

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

答案 3 :(得分:0)

也许这样的事情可行吗?

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