C# 多次读取一个值或第一次将其存储为变量?
基本上,在第一次运行时将值存储到变量中是更好的做法,还是继续使用该值?代码将更好地解释它:C# 多次读取一个值或第一次将其存储为变量?,c#,variable-assignment,C#,Variable Assignment,基本上,在第一次运行时将值存储到变量中是更好的做法,还是继续使用该值?代码将更好地解释它: TextWriter tw = null; if (!File.Exists(ConfigurationManager.AppSettings["LoggingFile"])) { // ... tw = File.CreateText(ConfigurationManager.AppSettings["LoggingFile"]); } 或 清晰很重要,干爽(不要重复)很重要。这是一个微观
TextWriter tw = null;
if (!File.Exists(ConfigurationManager.AppSettings["LoggingFile"]))
{
// ...
tw = File.CreateText(ConfigurationManager.AppSettings["LoggingFile"]);
}
或
清晰很重要,干爽(不要重复)很重要。这是一个微观抽象——在变量后面隐藏一个小的但仍然重要的功能。性能可以忽略不计,但清晰度的积极影响不能低估。获取值后,请使用一个名称良好的变量保存该值。第二种解决方案更适合我,因为:
- 查字典是有代价的
- 更具可读性
或者,您可以使用一个带有私有构造函数的单例对象,该构造函数会在您需要的所有配置数据中填充一次。第二个将是最佳选择 想象下一种情况。设置由其他线程更新,在其中一些线程中,由于设置值未锁定,因此会更改为另一个值 在第一种情况下,您的执行可能会失败,或者执行得很好,但代码正在检查某个名称的文件,然后将任何内容保存到以前未检查的文件中。这太糟糕了,不是吗
另一个好处是您不会两次检索该值。您只需要一次,然后在代码需要读取整个设置的地方使用它。我敢肯定,第二个更具可读性。但若你们谈论性能,不要在早期阶段和并没有分析器的情况下进行优化。我必须同意其他人的观点。可读性和干性很重要,而且考虑到通常只有对象,而不是多次真正存储对象,变量的成本非常低 特殊或大型对象可能会有例外。您必须记住这样一个问题:缓存的值是否会在这段时间内发生变化,以及您是否希望(大多数情况下是第二次!)知道代码中的新值!在您的示例中,考虑当ConfigurationManager.AppSettings[“LoggingFile”]在两次调用之间发生更改时(由于访问器逻辑或线程或总是从磁盘读取文件中的值),可能会发生什么情况
简历:大约99%你会想要第二种方法/缓存 这取决于您试图缓存的内容。从App.conig缓存设置可能不如通过GPRS连接缓存web服务调用的结果有益(代码可读性除外)。若要补充这一点,当您有单独的赋值语句时,它有助于在错误情况下进行调试。e、 g.如果变量的值无效并导致错误/异常,您可以在某处使用它之前进行检查。
TextWriter tw = null;
string logFile = ConfigurationManager.AppSettings["LoggingFile"].ToString();
if (!File.Exists(logFile))
{
// ...
tw = File.CreateText(logFile);
}