C# 很多insertQuerys—效率
我有一个静态方法,可以打开到SQL Server的连接,写入日志消息并关闭连接。 我在整个代码中多次调用此方法(平均每2秒调用一次) 问题是——效率高吗? 我想也许积累一些日志并用一个连接插入它们会更好 但是,我必须将它们保存在某个地方(xml?),这也需要成本 所以。。这样做的有效方法是什么? 写入xml\文件\任何内容,然后在一个连接中使用批量更新 或者打开连接进行任何小的更新C# 很多insertQuerys—效率,c#,sql-server,oledb,C#,Sql Server,Oledb,我有一个静态方法,可以打开到SQL Server的连接,写入日志消息并关闭连接。 我在整个代码中多次调用此方法(平均每2秒调用一次) 问题是——效率高吗? 我想也许积累一些日志并用一个连接插入它们会更好 但是,我必须将它们保存在某个地方(xml?),这也需要成本 所以。。这样做的有效方法是什么? 写入xml\文件\任何内容,然后在一个连接中使用批量更新 或者打开连接进行任何小的更新 public static bool writeLog(string TaskName="MainApp", st
public static bool writeLog(string TaskName="MainApp", string LogMessage=null)
{
string logCmd = ...
OleDbConnection conn = ...
OleDbCommand sqlCmd = new OleDbCommand(logCmd,conn);
try
{
conn.Open();
sqlCmd.ExecuteNonQuery();
}
catch (System.Exception ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
return isSuccses;
}
很难说你对效率的期望是什么,但这里有一个一般性的评论 即使每次打开连接,SQL Server也可以毫无问题地处理每2秒插入一条记录。一次插入一条记录,甚至不会出现明显的锁定问题等 如果要更改体系结构,将使维护数据完整性变得更加复杂和困难(必须将值存储在某种缓存中,并确保该缓存不会丢失,等等)。在这种情况下,这似乎没有必要
另一方面,您可能希望切换到本机SQL Server提供程序,并使用
SQLConnection
提高性能。这里没有像mongo DB这样的SQL更好的选择
否则,2秒也没什么大不了的,若您希望避免数据库上的任何负载,那个么将所有内容存储在文件中,并在非高峰时间批量传输它们也许你应该考虑一下,没有人会给你正确的答案,直到你收集一些统计数据和做实验。OLED的提供者不是最快的。我想知道为什么您不使用SqlConnection和本机提供程序的其余部分。我将澄清这个问题:写入xml\file,然后在一个连接中使用批量更新或打开连接进行任何小更新?不幸的是,您编写这个问题的方式,唯一正确的答案是“这取决于”。在我们的生产系统中,我们有两种应用程序——一种是打开连接并在每次需要记录某个内容时写入一个条目,另一种是将日志数据收集到一个巨大的字符串中,并异步将其写入数据库一次。前者进行夜间数据批处理,因此性能是灵活的,而后者是为高性能/快速响应时间调谐的Web服务。+ 1没有任何其他信息要考虑,每隔两秒写日志条目几乎不是一个性能问题。