在静态函数中使用new关键字创建对象时发生了什么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在静态函数中使用new关键字创建对象时发生了什么相关的知识,希望对你有一定的参考价值。
到目前为止这是我的代码:
public class ServerUtility
{
public static int LogError(string source, string detail)
{
int iresult = -99;
try
{
BaseRepository repo = new BaseRepository();
using (SqlConnection con = new SqlConnection(repo.connectionString))
{
con.Open();
using (SqlCommand cmd = new SqlCommand($"INSERT INTO [dbo].[LogError]([source],[detail],[date])VALUES('{source.Replace("'", "''")}','{detail.Replace("'", "''")}',GETDATE());SELECT @@IDENTITY", con))
{
string getValue = cmd.ExecuteScalar().ToString();
iresult = Convert.ToInt32(getValue);
} // command disposed here
} //connection closed and disposed here
}
catch (Exception ex) { throw ex; }
return iresult;
}
}
我的问题是关于GetInstance方法:
BaseRepository repo = new BaseRepository();
using (SqlConnection con = new SqlConnection(repo.connectionString))
我总是把它设置为我的静态函数的新对象,只是为了从AppSetting中获取常量值。
如果我将此代码实现到我的项目中,实际发生了什么?表现怎么样?
是否会导致性能问题?
谢谢
答案
就像@gtosto提到的那样,你没有正确实现单身人士。
它应该是:
public static SenderBackupProvider GetInstance()
{
if (oInstance == null)
{
oInstance = new SenderBackupProvider(CommFunction.GetLogNumber(CommonConst.APPID));
}
return oInstance;
}
看看Implementing the Singleton Pattern in C#。
编辑:
因为OP不相信oInstance
变量在第一次运行时应该为null,所以这是一个截图。
仔细查看代码后,您正在使用Web应用程序。静态变量的生命周期因平台而异。您可能需要在IIS中重新启动应用程序域。在Lifetime of ASP.NET Static Variable中查看更多信息。
以上是关于在静态函数中使用new关键字创建对象时发生了什么的主要内容,如果未能解决你的问题,请参考以下文章