未使用的常量是否仍在编译或优化?如果没有,怎么办?

时间:2016-04-04 14:24:09

标签: c# .net static compilation constants

我正在使用netMF编程嵌入式设备。记忆很珍贵。我正在访问低级MCU寄存器我想将所有这些寄存器保存在某种类型的静态类中,以便于访问。并非所有常量都在给定的程序中使用。

是否已编译未使用的常量?

如果是这样,是否有更好的方式使它们不被编译并且程序大小更小,同时产生静态类的相同功能并获得intellisense是visual studio?

public static class DeviceRegisters
{
    public const uint Tim9 = 0x40014000;
    public const uint Tim8 = 0x40010400;
    public const uint GPIOA_MODER = 0x40020000;
}

然后执行如下:

public class Thing
{
   public thing(uint timerRegister, uint GPIOx_register)
   {
       //do stuff
       Register thing = new Register(timerRegister);
       //...
   }

}

实例化如:

public class Program
{
   public static Thing MyThing;

   public static void Main()
   {
      MyThing = new Thing(DeviceRegisters.Tim9, DeviceRegisters.GPIOA_MODER);
      //rest of program below
   }

}

1 个答案:

答案 0 :(得分:5)

我不确定你是否希望它们在编辑中丢失。由于常量为public,因此可以在引用它的另一个程序集中使用它们。编译器不会对它们进行优化。

我很确定如果它们是internal并且未使用,编译器会在释放模式下删除它们。

错误,似乎即使在启用了优化代码选项的发布模式下,内部类中的私有常量也未被优化...

即使这样,uint只需要32位。没那么担心。