1

我首先使用带有代码的 EF 5 和带有 6.5.6 mySQL DotNet 连接器的 mySQL 5.5.25(但它不是连接器,因为 DevArt 连接器表现出相同的性能)并且具有如下实体:

public class SocialMediaEventEntity
{
    public virtual int Id { get; set; }   //PK
    public virtual DateTime Date{ get; set; }
    public virtual string ProvIdType{ get; set; }
    public virtual string ProviderId{ get; set; }
    public virtual int Rendered{ get; set; }
    public virtual int Sent{ get; set; }
    public virtual decimal UserId { get; set; }
    public virtual string UserName { get; set; }
    public virtual string UserScreenName { get; set; }
    public virtual string UserDescription { get; set; }
    public virtual ICollection<HistoryEntity> Messages { get; set; }
}

它使用以下代码优先配置密钥等。

  HasKey(entity => entity.Id);
  Property(entity => entity.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).IsRequired();

最终,我通过以下方式向该表添加了一行:

        var socialEvent = new SocialMediaEventEntity()
        {
                Date = ADate, 
                ProviderId = AProviderId, 
                ProvIdType = AProviderIdType, 
                Rendered = ARendered, 
                Sent = ASent, 
                UserId = AUserId, 
                UserName = AUserName ?? string.Empty,
                UserScreenName = AUserScreenName ?? string.Empty,
                UserDescription = AUserDescription ?? string.Empty,
                Messages = new List<HistoryEntity>()
        };

        MyDBContext.SocialMediaEvents.Add(socialEvent);

在皮肤下,这会生成预期的 SQL:

INSERT INTO tblSocialMediaEvents(`Date`, ProvIdType, ProviderId, Rendered, Sent, UserId, UserName, UserScreenName, UserDescription) VALUES ('2013-03-25 14:26:30', 'Twitter', '316028289447763968', 0, 0, 280310495, 'ChuBbyBhu', 'Komang Trinda Dewi', 'Always smile,,,but no crazy..:D\r All must be beautiful in its time'

现在,在我的机器上分析时的 INSERT 语句非常快,大约 1 毫秒,但是调用:

MyDBContext.SaveChanges();

需要从 ~20 到 ~40ms 的任何时间,偶尔 > 100ms。

在此处输入图像描述

当我分析代码时,我发现它实际上是大部分时间的事务提交。但是,当我在事务中执行完全相同的 SQL 到 mySQL 时,情况并非如此。

所以我的问题是:

  • 如何提高此代码的性能?除了不那么频繁地调用 SaveChanges() 之外?
  • 为什么事务提交比在像 HeidiSQL 这样的 mySQL 客户端工具中执行相同代码时花费的时间要长得多?

感谢任何帮助和指示。

编辑:我对 SQL Server 2008 Express 使用了完全相同的代码,性能非常出色。通常 INSERTS < ~1ms 和 SaveChanges ~1ms。我自然希望 M$ 产品很快,但我被 mySQL 卡住了,无法改变。那么有什么我可以做的吗?

4

0 回答 0