公共静态变量的最佳替代方案是什么?



我的app.xaml.cs文件中有50个公共静态变量。我被告知这些都留在内存中,减慢了应用程序的速度。这是真的吗?如果是这样,我该如何解决它?

我正在使用它们来全局更改背景和颜色。我还在跟踪多个页面上的列表,在这些页面上很难传递很多参数。

不过,我没有尝试过元组。如果这种方式不占用大量内存,请告诉我。如果没有必要,我不想对商店中已经存在的整个应用程序进行大修。谢谢。

public static double ScreenHeight,
ScreenWidth,
WeatherPositionLatitude = 0.00,
WeatherPositionLongitude = 0.00,
WindIndicatorRotation,
DraggedLatitude,
DraggedLongitude,
LastSavedLatitude,
LastSavedLongitude,
NewLatitude,
NewLongitude,
FishingAreaMapLatitude,
FishingAreaMapLongitude,
DeviceScreenWidth,
DeviceScreenHeight;
public static string DbPath = string.Empty,
NetworkStatus,
Units,
WeatherPositionName,
MapTypeString = "Hybrid View",
AdPage = "",
ConnectionTextColor,
RutDate,
BackgroundImage,
IconColor,
Datum,
CompassImage = "compassfaceblue.png",
PredictionStationName;
public static bool TimeFormat24,
MeasurementFormatMetric,
AnimalCallsEnabled,
GPSTimeout = false,
NoRotate = false,
ResetSlider = false,
MapLongPress = false,
MapAdd = false,
WeatherError = false,
NetworkMessage = false,
AdjacentPage = false,
NoNetwork,
FlashlightOn,
UseDegrees,
InitialSlider,
WeatherSiteDown = false,
LightWater,
TideSiteDown,
PredictionMode = false,
MenuGrid;
public static TrackingLocation DeletedTrackingLocation;
public static FishingLocation DeletedFishingLocation;
public static FishingLog DeletedFishLogEntry;
public static DateTimeOffset LastSavedPositionTime;
public static int CurrentFishingAreaId, SliderValue, GpsAccurracy, RutStars;
public static Position InitialPosition;
public static ImageSource GridViewIcon, ListViewIcon;
public static List<string> BadTideWaterLevelStations = new List<string>();
public static List<string> BadTidePredictionStations = new List<string>();
public static Color ButtonColor;
public MasterDetailPage HomePage;
private readonly string iconcolor;

内存中的变量不应占用大量大小。Static变量与 C# 中的任何其他变量类似,只是它们永远不会超出范围,因此不会释放它们引用的对象。 但是,每当将每个静态变量指向不同的对象或将它们设置为null时,任何不再具有任何引用的对象最终都会被释放。 因此,静态变量可能不会占用大部分内存。 事实上,任何设置为 null 的变量都不会占用任何大小,除了指向 null 的内存地址!


看看你的代码,我想你占用的内存可以忽略不计。 您有一些doubles,每个 8 个字节,还有一些bools,每个 1 个字节,以及strings,它们根据长度更改大小。 您拥有的所有其他变量只要为空就不会占用任何内存。 即使使用更复杂的对象,也不太可能超过几KB,这在内存方面几乎为零。

至于更好的面向对象的编程实践,将静态变量组织成"包装类"可能是有意义的,然后这些包装类被实例化并存储在静态变量中。 这样,您可以通过将静态引用设置为null来在不需要数据时"加载"和"卸载"数据。 但是,在这种情况下,我无法想象静态变量会占用那么多内存 - 即使它们占用了,它们实际上只会在运行代码的计算机必须将程序内存读/写到页面文件时才会影响性能。

我希望这有所帮助 - 老实说,你在这种情况下的方法似乎是完全可以接受的。

相关内容

  • 没有找到相关文章

最新更新