C# 在Windows Phone上使用Linq to SQL时,是否可以提高批量删除的性能?

C# 在Windows Phone上使用Linq to SQL时,是否可以提高批量删除的性能?,c#,linq-to-sql,windows-phone,sql-server-ce,C#,Linq To Sql,Windows Phone,Sql Server Ce,我在Windows Phone应用程序中使用Linq to SQL,在超出网络/Wi-Fi覆盖范围时充当缓存。这一切都很好,但我发现从缓存中删除过时的条目似乎需要使用很多单独的语句 考虑到清除表的相对简单的情况,例如,如果最终用户选择注销: context.CacheChecks.DeleteAllOnSubmitcontext.CacheChecks; 您希望生成的SQL是以下形式或类似形式: 从缓存检查中删除 然而,它变成了更类似于: 选择[t0].[LastChecked],[t0].[E

我在Windows Phone应用程序中使用Linq to SQL,在超出网络/Wi-Fi覆盖范围时充当缓存。这一切都很好,但我发现从缓存中删除过时的条目似乎需要使用很多单独的语句

考虑到清除表的相对简单的情况,例如,如果最终用户选择注销:

context.CacheChecks.DeleteAllOnSubmitcontext.CacheChecks; 您希望生成的SQL是以下形式或类似形式:

从缓存检查中删除 然而,它变成了更类似于:

选择[t0].[LastChecked],[t0].[EntityType] 从[CacheChecks]到[t0] -@p0:Input DateTime -尺寸=0;Prec=0;比例=0[3/13/2008 12:00:00 AM] 从[CacheChecks]中删除,其中[EntityType]=@p0 -@p0:输入唯一标识符大小=0;Prec=0;比例=0[{GUID}] 从[CacheChecks]中删除,其中[EntityType]=@p0 -@p0:输入唯一标识符大小=0;Prec=0;比例=0[{GUID}] -每行的单个DELETE语句 在桌面上,我看到了各种允许批量更新的扩展方法,这似乎是可行的,但这种方法在windows Phone环境中不起作用,因为无法为给定上下文创建任意DbCommand


是否有其他方法可以比逐行更有效地处理批量删除多行1000?

是的,在我的测试中,可以绕过查询处理器执行删除操作,将删除100行的时间从320毫秒提高到70毫秒。只需向表中添加一个rowversion列即可:

[Column(IsVersion=true)] 
private Binary _version;

这里有更多信息:

我不熟悉Windows Phone的开发,但截断表不是一种选择吗?类似于context.executeCommand和truncate table_name;?这里可以看到类似的问题:和Isarus相同,但我考虑的是context.Database.ExecuteSqldelete from table_name@在Windows Phone上,该方法不存在:@IronSlug,数据库也不会通过Windows Phone数据上的属性公开context@Icarus这就是我前几天发现的问题,这让我找到了特里的博客: