【发布时间】:2017-09-29 13:51:13
【问题描述】:
我正在开发wpf应用程序,其中有一部分应该重复多次,实际上是关于打印文档的,
每次当用户点击打印时,它都会被执行,所以一些信息,如打印机名称、路径等我存储在 XML 文件中,
我想知道,因为该操作将重复多次将其存储到全局变量中是否更好,并且只设置一次(例如在App.xaml 文件中的Application_Startup 方法中)并在我需要的时候使用它,也许它比每次从我的 XML 中读取要快?
这是一个代码示例:
XML 解决方案:
//call code below everytime user wants to print document
Printer printer = new Printer();
printer.AdressAnswer = Globals.ReadValueFromXML("answeraddress");
//ReadValueFromXML is my method which is returning value from xml and is defined below
public static string ReadValueFromXML(string nodeName)
{
try
{
XPathDocument doc = new XPathDocument("C:\\ApplicationSettings.xml");
XPathNavigator nav = doc.CreateNavigator();
// Compile a standard XPath expression
XPathExpression expr;
expr = nav.Compile(@"/settings/" + nodeName);
XPathNodeIterator iterator = nav.Select(expr);
// Iterate on the node set
while (iterator.MoveNext())
{
return iterator.Current.Value;
}
return string.Empty;
}
catch
{
//do some error logging here. Leaving for you to do
return string.Empty;
}
}
使用全局变量的解决方案:
Printer printer = new Printer();
printer.AdressAnswer = Globals.PathToFolder;
和
Globals.PathToFolder
之前会在
中设置private void Application_Startup(object sender, StartupEventArgs e)
{
try
{
//Call again ReadValueFromXML method but call it only once and use static variables multiple times
Globals.PathToFolder = Globals.ReadValueFromXML("answeraddress");
}
}
现在我想知道哪种解决方案更好,为什么?
【问题讨论】:
-
当每个请求都需要完成时,请在每个请求上执行。否则只做一次并存储它。但是,如果这真的对性能不利吗?我们不知道,你可以测量一下。
-
@HimBromBeere 我只是想知道在每次请求时从全局变量中读取值还是从 XML 文件中读取值更好,也许是从内存中读取(全局变量更快)?
-
首先:C# 中没有全局变量之类的东西,每个变量都绑定到一个类(但不一定绑定到一个类的 instance)。第二:实际的问题不是你想要一个静态变量还是非静态变量,而是如果你想读取每个请求的值,如果值在请求之间不会改变,那么这已经过时了,不是吗?所以只需读取一次(例如在应用程序启动时)并在每次请求时使用它。
标签: c# xml wpf properties desktop-application