C# 未使用的常量是否仍在编译或优化?如果没有,如何完成?
我正在用netMF编程一个嵌入式设备。记忆是珍贵的。我正在访问低级MCU寄存器,我想将所有这些寄存器保存在类似这样的静态类中,以便于访问。并非所有常量都用于给定的程序中 是否编译了未使用的常量? 如果是这样,是否有更好的方法使它们不被编译且程序大小更小,同时产生与visual studio相同的静态类功能并获得intellisense?C# 未使用的常量是否仍在编译或优化?如果没有,如何完成?,c#,.net,static,compilation,constants,C#,.net,Static,Compilation,Constants,我正在用netMF编程一个嵌入式设备。记忆是珍贵的。我正在访问低级MCU寄存器,我想将所有这些寄存器保存在类似这样的静态类中,以便于访问。并非所有常量都用于给定的程序中 是否编译了未使用的常量? 如果是这样,是否有更好的方法使它们不被编译且程序大小更小,同时产生与visual studio相同的静态类功能并获得intellisense? public static class DeviceRegisters { public const uint Tim9 = 0x40014000;
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
}
}
我不确定你是否希望它们在编译过程中丢失。因为常量是公共的,所以它们可以在引用它的另一个程序集中使用。编译器不会优化它们 我很确定如果它们是
内部的
并且没有使用过,编译器会在发布模式下删除它们
错误,似乎内部类中的私有常量在启用优化代码选项的发布模式下也没有优化掉
即使如此,
uint
也只需要32位。没什么好担心的。如果public
,编译器不会对它们进行优化,因为任何引用库的东西都可能需要访问常量。不过,我不知道它是否会intern
未使用的常量。如果内存是一个问题,那么首先就不应该使用C
。例如,纯C
中的常量在被使用之前不会在内存中。@willaien您是否建议使用internal const
而不是public const
?反编译器会100%准确地告诉您您是否建议对常量使用internal
而不是public
,你问他们是否会被优化掉。这是我如何处理它们的知识/经验。我希望将未使用的常量优化掉。这是如何实现的?将它们标记为内部,然后构建并使用反编译器(如Reflector)检查它们是否消失。不,它们没有被优化掉。我已经测试了我知道的所有选项@吉斯莫夫