可能重复:将
ASP.NET成员资格数据库迁移到SQL Azure
如何在sql azure数据库上运行aspnet_regsql?通过导出所有数据库对象,我努力工作.但是,我认为有一种更简单的方法.请帮忙.
我需要在一个包含大约150,000行的表上搜索文本字段(varchar 500).
我尝试的第一个选项是直接在db服务器上执行存储过程,如下所示:
Select p.ProductID,
p.ProductDescription,
p.SalesPrice
From Products p
Where p.ProductDescription Like '%' + @PartialDescription + '%'
Run Code Online (Sandbox Code Playgroud)
结果很慢.即使使用ProductDescription索引,性能也不够快.
我想出的下一个解决方案是按照以下步骤进行的:
每当我需要进行搜索时,我会浏览该集合并进行下面的字符串比较
List<Product> searchResultItems = new List<Product>();
for (int i = 0; i < cachedProducts.Count; i++)
{
Product p = cachedProducts[i];
if (p.Description.IndexOf(partialDescription, StringComparison.OrdinalIgnoreCase)>=0)
{
searchResultItems.Add(p);
}
}
return searchResultItems;
Run Code Online (Sandbox Code Playgroud)此解决方案比直接搜索到数据库快一点.通过在内存中缓存表,它可以在很大程度上避免数据库调用.然而,它与传统系统(在10多年前在FileMaker上构建)的比较仍然很慢.我无法访问遗留系统的源代码,也不了解它.
使用MS SQL Server 2008数据库,使用System.Runtime.Caching上的ObjectCache编写的C#代码和缓存,我希望我的解决方案能够轻松胜过旧系统.令人尴尬的是,事实并非如此.如何优化我的搜索方法?我究竟做错了什么?上面的函数驻留在WCF服务中,并由Web应用程序使用(basicHttpBinding)而没有任何花哨的控件.我该怎么做才能让它更快?
直接搜索到数据库,它是一个更好的解决方案,任何类型的优化?我该如何优化它?
我正在编写一个多线程应用程序.这是我的情况.
我从数据库中抓取了一千条记录.将其划分为5个列表对象块.并创建5个线程来处理它们.我每分钟做同样的事情,直到我有数据库中的记录
Task.Factory.StartNew(() => ProcessRecords(listRecords))
Run Code Online (Sandbox Code Playgroud)
在ProcessRecords方法中,有一个小的数据库更新和一些发送邮件.(我正在使用System.Net.Mail发送电子邮件,不要使用任何ORM进行数据库操作.)
现在我担心由于某些未知问题,线程可能无法完成.在那种情况下会发生什么?让我们说一个进程(甚至更多)继续等待数据库中的死锁或什么,我的应用程序会发生什么.它将继续使用新的记录集添加新线程,而一些永不结束的线程.在这种情况下如何实现超时等功能呢?
我想运行这个过程,如果它无法完成它,在5分钟后终止它.