【发布时间】:2015-02-18 17:22:05
【问题描述】:
我有一个 MVC5 应用程序,我正在使用 Azure 的 EF6 和 MySQL 数据库服务,即 CleanDB MySQL。我有一个 CSV 阅读器类,它在我的控制台应用程序中运行得非常快。然后,在我的 MVC 应用程序中,我有一个这样的模型:
Provider.cs
public class Provider
{
public int ProviderId { get; set; }
public string ProviderName { get; set; }
public string Email { get; set; }
public string Address { get; set; }
public string City { get; set; }
[ForeignKey("State")]
public int StateID { get; set; }
public virtual State State { get; set; }
public string Zip { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }
public string SICCode { get; set; }
public string Description { get; set; }
public string Website { get; set; }
public string RefId { get; set; }
}
然后,在我的 Configuration.cs 文件中,我有这样的内容:
string[] csvs = Directory.GetFiles(@"C:\Users\User\Downloads\db\test\");
foreach (string csv in csvs)
{
using (CsvReader reader = new CsvReader(csv))
{
foreach (string[] values in reader.RowEnumerator)
{
var provider = new Provider();
provider.ProviderName = values[0];
provider.Email = values[1];
provider.Address = values[2];
provider.City = values[3];
provider.StateID = 491;
provider.Zip = values[5];
provider.Phone = values[6];
provider.Fax = values[7];
provider.SICCode = values[8];
provider.Description = values[9];
provider.Website = values[10];
provider.RefId = "";
context.Providers.Add(provider);
}
}
}
context.SaveChanges();
关键是我有大约 50 个 CSV 文件,总大小为 400MB,总条目数约为 900 万。出于测试目的,我使用了列表中最小的 CSV 文件,它是一个 2MB 的文件,大约有 15k 个条目。执行Update-Database 花了大约 40 分钟将所有这些条目放入数据库。你可以假设我需要多少时间来处理 900 万个条目。知道如何加快这个过程吗?
【问题讨论】:
-
您的仪器在哪里显示所花费的时间? IE,我假设您的日志记录解决方案应用了时间戳,那么根据这些时间戳,您正在执行的最昂贵的操作是什么?当涉及到性能问题时,衡量衡量衡量!
-
史蒂夫做对了。 EF 不适用于批量操作(大量导入/导出)。每个数据库都有它自己的功能。例如,MSSQL 使用 BCP。
标签: mysql asp.net-mvc entity-framework csv azure