- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在磁盘上有一个 SQL CE 4.0 数据库,还有一个 LINQPad我想用来填充该数据库的程序。
我正在使用内置(到 LINQPad)linq2sql 系统。我注意到随着时间的推移,插入一批行所需的时间越来越多,最终看起来程序已经慢到爬行。
是否有某种缓存或类似的东西会减慢它的速度?如果有的话,我能做些什么来避免这种减速?
这是我用来测试它的简单测试表:
CREATE TABLE dummy
(
id int not null primary key identity (1, 1),
value nvarchar(20) not null
)
void Main()
{
for (int iteration = 1; iteration <= 1000; iteration++)
{
Stopwatch sw = Stopwatch.StartNew();
for (int row = 0; row < 100; row++)
dummy.InsertOnSubmit(new dummy { value = "row#" + row });
var create = sw.ElapsedMilliseconds;
SubmitChanges();
sw.Stop();
var total = sw.ElapsedMilliseconds;
Debug.WriteLine("iteration " + iteration + ", create=" + create + ", total=" + total);
}
}
iteration 1, create=1, total=52
iteration 2, create=0, total=41
iteration 3, create=0, total=53
iteration 4, create=0, total=45
...
iteration 86, create=0, total=181
iteration 87, create=0, total=218
iteration 88, create=0, total=172
iteration 89, create=4, total=192
...
iteration 167, create=0, total=387
iteration 168, create=0, total=427
iteration 169, create=0, total=496
iteration 170, create=0, total=425
SubmitChanges
所需的时间花费越来越多的时间,但我每次迭代都插入相同数量的实体。
iteration 1, create=1, total=51
iteration 2, create=0, total=50
iteration 3, create=0, total=45
iteration 4, create=0, total=45
最佳答案
听起来您想从 LINQPad 中将数据批量复制到 SQL Server。这是我用来执行此操作的方法:
void BCP<TRow> (IEnumerable<TRow> rows)
{
if (rows.Count() == 0) return;
var dt = new DataTable ();
var metaTable = _db.Mapping.GetTable (typeof (TRow));
var columns = metaTable.RowType.DataMembers.Where (dm => dm.Association == null);
var transformers = new List<Func<TRow, object>>();
foreach (var columnX in columns)
{
var column = columnX;
dt.Columns.Add (column.Name, L2sToDataTable (column.Type));
transformers.Add (row => L2sToDataTable (row.GetType().GetField (column.Name).GetValue (row)));
}
foreach (var row in rows)
dt.Rows.Add (transformers.Select (t => t (row)).ToArray());
_db.Connection.Open();
Console.Write ("Bulk copying " + metaTable.TableName + "... ");
var bcp = new SqlBulkCopy ((SqlConnection)_db.Connection) { DestinationTableName = metaTable.TableName, BulkCopyTimeout = 300 };
bcp.BatchSize = 20;
bcp.NotifyAfter = 20;
bcp.SqlRowsCopied += (sender, args) => Console.Write (args.RowsCopied + " rows... ");
bcp.WriteToServer (dt);
_db.Connection.Close();
Console.WriteLine ("Done");
}
Type L2sToDataTable (Type l2sType)
{
if (l2sType == typeof (Binary)) return typeof (byte[]);
if (l2sType.IsGenericType && l2sType.GetGenericTypeDefinition() == typeof (Nullable<>)) return l2sType.GetGenericArguments()[0];
return l2sType;
}
object L2sToDataTable (object l2sValue)
{
if (l2sValue == null) return DBNull.Value;
if (l2sValue is Binary) return ((Binary) l2sValue).ToArray();
return l2sValue;
}
关于c# - 使用 LINQPad 将数据插入 SQL CE 数据库,Linq-to-sql,随着时间的推移变得越来越慢,我能做些什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21352274/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!