SqlConnection线程安全吗?我有一个Log类,它将日志放在Windows日志和SQL表中。为了优化我的代码,我只想使用一个SqlConnection。在MSDN中它说:此类型的任何公共静态(在VisualBasic中共享)成员都是线程安全的。没有实例成员保证是线程安全的。我的问题是:privatestaticreadonlySqlConnectionconn=newSqlConnection(ConfigParameters.Instance.UIDConnection);它是线程安全的吗?如果是,使用Open()和Close()?如果不是,如何正确使用SqlConnection?这是我的完整课程代码:privatestaticreadonlySqlConnectionconn=newSqlConnection(ConfigParameters.Instance.UIDConnection);publicstaticlongWriteLog(stringsSource,stringsMessage,intiErrorCode,EventLogEntryTypexErrorType){//Windows日志if(ConfigParameters.Instance.WindowsLog)EventLog.WriteEntry(sSource,sMessage,xErrorType,iErrorCode);//SQL日志//TODO返回0;这不是共享SqlConnection的常用方法,只应在特殊用例中使用。首先,您确实知道资源池是一种常用模式,用于在使用套接字、网络流、Web服务时提高性能……但尤其是对于SqlConnection,您不必担心这一点,因为框架已经这样做了对你来说,多亏了Sql连接池。每当用户在连接上调用Open时,池程序将在池中查找可用连接。如果池连接可用,则将其返回给调用者而不是打开新连接。当应用程序在连接上调用Close时,池程序会将其返回到池中的活动连接集,而不是将其关闭。一旦连接返回到池中,它就可以在下一个Open调用中重用。您可以将SqlConnection视为实际连接的包装器。不要相信实例化一个新的SqlConnection很昂贵:它并不多,而且许多高流量的网站都是用它构建的。默认策略(至少对于sqlserver)是它会自动运行。您只需要知道关闭连接(使用using块)。还有许多设置可以管理池。您的代码还包含不正确的错误管理:如果连接中止(DBA、网络故障等),您将在记录时抛出异常……因此不理想,我认为这不适合您案例共享sql连接。使用异步日志记录库可以获得更高的性能。在确定这是一个真正的问题之前,不要专注于此。我们应该忘记小效率,大约97%的时间说:过早的优化是万恶之源,DonaldKnuth以上是C#学习教程:IsSqlConnectionthreadsafe?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
