这是我的示例代码:
if (_Timing != target.Split(':')[0] + ": ")
_Timing = target.Split(':')[0] + ": ";
我检查_Timing
是否不等于target.Split(':')[0] + ": "
,然后将其关联到_Timing
。我两次执行了此target.Split(':')[0] + ": "
。我需要避免它。
另一个例子是
if (db.Students.FirstOrDefault(x => x.Name == "Joe") != null)
var a = db.Students.FirstOrDefault(x => x.Name == "Joe");
在这里,我再次执行db.Students.FirstOrDefault(x => x.Name == "Joe")
两次。这些示例只是一些示例。我需要避免像这样的两次编码。
由于收到答案,我可以这样做:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
_Timing = splitted;
但是我不想做这样的事情,因为splitted
将保留在内存中。我正在寻找一种不将这些临时数据保存到内存中的方法。
有什么建议吗?
答案 0 :(得分:4)
您可以将可重用语句保存在变量中,并在流程控制中需要进一步使用的地方重用:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
_Timing = splitted;
linq查询也是如此:
var student = db.Students.FirstOrDefault(x => x.Name == "Joe");
if (student != null)
{
// do something here with student
}
如果要避免编写linq查询,则也可以介绍方法:
public Student GetStudentByName(string name)
{
return db.Students.FirstOrDefault(x => x.Name == "Joe");
}
并重新使用它:
var student = GetStudentByName("Joe");
if (student != null)
{
// do something here with student
}
答案 1 :(得分:1)
根据您的要求您说:
由于收到答案,我可以这样做:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
_Timing = splitted;
但是我不想做这样的事情,因为拆分将保留在内存中。我正在寻找一种不将该临时数据保存到内存中的方法。 有什么建议吗?
是的,有一种从内存中显式删除变量的方法。
您可以尝试这样做以实现相同的目的,并且变量splitted
不再保留在内存中:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
{
_Timing = splitted;
splitted = null;
GC.Collect(); // It this stage the 'splitted' is not longer remain in the memory.
}
答案 2 :(得分:0)
删除if
块。
_Timing = target.Split(':')[0] + ": ";
将分配移出if块
var student = db.Students.FirstOrDefault(x => x.Name == "Joe");
if (student != null)
{
//
}