C# Singleton模式/检查Null-使用Asp.Net与会话时
在下面的代码中,我希望Asp.net应用程序中每个会话只执行一次“GetClassTeacher”方法,在调用数据库之前,我使用会话检查对象是否为null 我的问题是,这是实现此方法的最佳方式,还是可以使用单例模式来完成此任务,如果可以,如何在每个会话中实现它C# Singleton模式/检查Null-使用Asp.Net与会话时,c#,asp.net,C#,Asp.net,在下面的代码中,我希望Asp.net应用程序中每个会话只执行一次“GetClassTeacher”方法,在调用数据库之前,我使用会话检查对象是否为null 我的问题是,这是实现此方法的最佳方式,还是可以使用单例模式来完成此任务,如果可以,如何在每个会话中实现它 public class School { public List<Student> GetAllStudents() {} public List<Teacher> GetAllTeachers
public class School
{
public List<Student> GetAllStudents() {}
public List<Teacher> GetAllTeachers() {}
//Singleton pattern or Check for Null
public Teacher GetClassTeacher()
{
Teacher teacher = new Teacher();
teacher = Session["Teacher"] as Teacher
if (teacher == null)
{
//Get Teacher Info from Database
}
}
}
公立学校
{
公共列表GetAllStudents(){}
公共列表GetAllTeachers(){}
//单例模式或检查是否为空
公共教师GetClassTeacher()
{
教师=新教师();
教师=课时[“教师”]作为教师
如果(教师==null)
{
//从数据库获取教师信息
}
}
}
我认为使用session是可以的,但是如果不需要,您可以通过不实例化teacher对象来减少一些开销:
public Teacher GetClassTeacher()
{
var teacher = Session["Teacher"] as Teacher
if (teacher == null)
{
//Get Teacher Info from Database
}
}
下面是一个单例示例:。此外,对不同实现的一些调查:
否则,我不知道如何说使用单例(或不使用单例)是“最好的”。你的情况将有助于决定它。就我个人而言,我在asp.net中做的工作并不需要它。检查null是完全有效的。使用会话也是有效的
public static Teacher GetClassTeacher()
{
Teacher teacher = HttpContext.Current.Session["Teacher"] as Teacher;
if (teacher == null)
{
//Get Teacher Info from Database
teacher = GetTeacherFromDB();
HttpContext.Current.Session["Teacher"] = teacher;
}
return teacher;
}
为什么要创建一个新的
Teacher
实例,然后每次调用GetClassTeacher()
时都丢弃它?谢谢你的回复,你认为当你从会话实例化并分配它时会占用更多内存吗,实例化一个对象肯定会使用内存——我假设如果找不到老师,就返回null。另一方面,如果您返回一个新创建的教师对象,那么您应该保留现有的对象。在任何情况下,会话状态都可以使用,只要内存有点不稳定,并且如果应用程序变大时不会出现缩放问题。@user841683:任何时候你说new…
,它都会使用内存。这只允许您避免创建一个新实例,而您最终会在下一行中覆盖该实例。在Asp.Net中,在什么情况下,我将使用singleton,因为大多数工作都可以通过Session/Cache/Static来完成,方法是检查它是否为null,如果我理解singleton…大,如果…它们旨在阻止您创建更多一个类的多个实例。但是,如果它们能够中断代码执行,那么它们可能是一个大问题。只要在实例化之前仔细检查null,那么无论是否使用单例,效果都是一样的。那为什么要用它呢?我想说不要。这里有一个更深入的讨论: