【发布时间】:2021-05-10 22:07:24
【问题描述】:
我在这里查看了所有“更高效”的帖子,但没有人直接回答这个问题,所以我需要一些大智慧来帮助我。
我目前将设置存储在 app.config 中,并根据需要获取值。我用这个方法:
public static string AppConfig_GetKeyValue(string strAppSettingKeyName)
{
ConfigurationManager.RefreshSection("appSettings");
string myAppSettingValue = ConfigurationManager.AppSettings[strAppSettingKeyName];
return myAppSettingValue;
}
问题是......如果我正在执行大量操作,例如 SQL 插入或将信息写入屏幕或终端,是否更好地全局存储该值以提高速度/效率?例如:
如果在每次 SQL 插入时,我们都会检查 app.config 中的值:
<add key="mySQLLogging" value="true"/>
与声明全局类似:
public static bool mySQLLoggingOn = bool.Parse(TTLog.AppConfig_GetKeyValue("mySQLLogging"));
哪个更好?也许简要解释一下原因?
作为第二个示例,我为用户将内容记录到屏幕上,但如果我想要详细信息,则在每行中包含文本 DEBUG,但除非该模式在 app.js 中为“true”,否则不想显示它。配置:
public static void DoWriteLine(string strMessage, bool blnShowDateStamp = true, ConsoleColor clrForeColor = ConsoleColor.Green, ConsoleColor clrBackColor = ConsoleColor.Black)
{
if (strMessage.ToLower().Contains("debug") && !(bool.Parse(AppConfig_GetKeyValue("myModeDebugOn")))
return; // If app.config key is false, don't process message to the screen
Console.ForegroundColor = clrForeColor;
Console.BackgroundColor = clrBackColor;
if (blnShowDateStamp)
Console.WriteLine(("[ " + DateTime.Now.ToString("ddd MM/dd/yyyy hh:mm:ss.fff") + " ] -> " + strMessage).PadRight(Console.WindowWidth - 1));
else
Console.WriteLine((strMessage).PadRight(Console.WindowWidth - 1));
Console.ResetColor();
}
以上,显然是对应app.config中的key:
<add key="myModeDebugOn" value="True"/>
然后,可能每秒都必须处理这个:
if (strMessage.ToLower().Contains("debug") && !(bool.Parse(AppConfig_GetKeyValue("myModeDebugOn")))
return;
那么所有这些文件读取操作的效率都低了吗?我只记得从学习编程的第一天起,永远不要使用全局变量,这很糟糕。
谢谢!
【问题讨论】:
-
当询问效率时,真的很难说...您需要设置基准并自己衡量。结果很大程度上取决于特定的机器,因此即使在您的 PC 上运行基准测试也只能提供一些见解,而不是确定的答案。
-
调用 RefreshSection 意味着你想在不停止程序的情况下重新读取配置。是否允许在程序运行时更改配置?这可能很昂贵。您需要使用和不使用该行来测试您的代码。当然没有它你应该得到更好的时机。
-
Obligatory link to Eric Lippert's rant on performance questions。基本上,在你运行代码的情况下自己测量它。
-
谢谢@HereticMonkey 和 Michal ...我想我现在必须学习如何进行基准测试...很好奇其他人是否已经经历过全局与文件读取,但我会想办法的我猜。谢谢。
标签: c# global-variables processing-efficiency