我在SQLite数据库插入8500行。 Core 2 Duo需要> 30sec
。 在这段时间内它使用70%的CPU,那么问题在于CPU使用率。为什么SQLite插入会很慢? (事务使用)
我正在使用交易。
我创建数据库,表和插入在一个临时文件上的动态。然后,我不需要担心腐败等
我只是试图利用这一点,但不要帮助:
PRAGMA journal_mode = OFF;
PRAGMA synchronous = OFF;
更重要的是我可以做什么?
如果我在Firefox SQLite Manager插件上运行相同的脚本,它会立即运行。
我运行了剖析器。
所有的时间都在
27seg System.Data.SQLite.SQLite3.Prepare(SQLiteConnection, String, SQLiteStatement, UInt32, String&)
此方法调用三种方法
12seg System.Data.SQLite.SQLiteConvert.UTF8ToString(IntPtr, Int32)
9seg System.Data.SQLite.SQLiteConvert.ToUTF8(String)
4seg System.Data.SQLite.UnsafeNativeMethods.sqlite3_prepare_interop(IntPtr, IntPtr, Int32, IntPtr&, IntPtr&, Int32&)
您出示插入。这里:
INSERT INTO [Criterio] ([cd1],[cd2],[cd3],[dc4],[dc5],[dt6],[dc7],[dt8],[dt9],[dt10],[dt11])VALUES('FFFFFFFF-FFFF-FFFF-FFFF-B897A4DE6949',10,20,'',NULL,NULL,'',NULL,julianday('2011-11-25 17:00:00'),NULL,NULL);
表:
CREATE TABLE Criterio (
cd1 integer NOT NULL,
cd2 text NOT NULL,
dc3 text NOT NULL,
cd4 integer NOT NULL,
dt5 DATE NOT NULL DEFAULT CURRENT_TIMESTAMP,
dt6 DATE NULL,
dt7 DATE NULL,
dc8 TEXT NULL,
dt9 datetime NULL,
dc10 TEXT NULL,
dt11 datetime NULL,
PRIMARY KEY (cd2 ASC, cd1 ASC)
);
C#代码:
scriptSql = System.IO.File.ReadAllText(@"C:\Users\Me\Desktop\ScriptToTest.txt");
using (DbCommand comando = Banco.GetSqlStringCommand(scriptSql))
{
try
{
using (TransactionScope transacao = new TransactionScope())
{
Banco.ExecuteNonQuery(comando);
transacao.Complete();
}
}
catch (Exception ex)
{
Logging.ErroBanco(comando, ex);
throw;
}
}
您确定*正在使用单笔交易吗? – 2011-12-01 10:39:02
是的,我确定。我尝试使用(TransactionScope transacao = new TransactionScope())和命令文本中的BEGIN TRANSACTION ... COMMIT。 –
我不知道这是否是相关的,但检查您的防病毒软件,否则你可以使用Process Explorer的知道是否有出头你的数据库文件的寄生虫程序 –