小编Jes*_*sse的帖子

DbContext AutoDetectChangesEnabled设置为false检测更改

我有点难过.根据我的阅读设置DbContext.AutoDetectChangesEnabled,false应该禁用需要调用的更改跟踪DbContext.DetectChanges,以便识别要发送到数据库的更改.

但是,从我的下面的日志中可以清楚地看到,dbContexts更改跟踪器正在注册更改,即使设置为false也是如此.

我错过了什么吗?

实体框架版本:5.0.0.0

DbContext类

public class ProjectContext : DbContext {
    public DbSet<Project> Projects {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

控制器类

private ProjectContext db = new ProjectContext();

public method(){
    Project p = new Project("uniqueName");
    db.Configuration.AutoDetectChangesEnabled = false;
    db.Projects.Add(p);
    DebugChangeTracker();
    db.SaveChanges();

    db.Projects.First().ProjectName = "a differentName!";
    DebugChangeTracker();
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

记录方法

    private void DebugChangeTracker()
    {
        var path = "C:\\mypath\\";
        path = path + Util.GetMsSinceEpoch().ToString() + "changeTracker.log";

        using (StreamWriter sw = new StreamWriter(path))
        {
            var changeTracker = db.ChangeTracker;
            var entries = changeTracker.Entries(); …
Run Code Online (Sandbox Code Playgroud)

entity-framework dbcontext entity-framework-5

44
推荐指数
3
解决办法
5万
查看次数

为什么调试模式下DbContext.SaveChanges要慢10倍

有人可以解释一下

  1. 为什么DbContext.SaveChanges在调试模式下比生产模式慢~10倍?
  2. 有什么方法可以加快速度吗?

在调试模式下,如果我在没有调试的情况下启动项目,我的网页加载时间为116秒,而加载时为15秒.

我已经设置了跟踪语句,并确定在调试模式下,在我的DbContext.SaveChanges方法中花费了大约116秒.

运行项目而不调试在同一部分中花费7秒钟.

如果您想了解更多信息,请在评论中告诉我.

项目设置:

  • ASP.NET网页
  • VS2012
  • SQLServer2012
  • 实体框架5.0

附加信息:(如果您需要更多,请在评论中告诉我)

  • SaveChanges方法的累积sql查询数为20,000
  • 生产连接字符串:数据源= PC-DEV;初始目录= aspnet-2013-06-04;集成安全性= True; MultipleActiveResultSets = True;应用程序名称= EntityFrameworkMUE
  • Debug Connection String:Data Source = PC-DEV; Initial Catalog = aspnet-2013-06-04; Integrated Security = True; MultipleActiveResultSets = True; Application Name = EntityFrameworkMUE
  • 我也经历过与LocalDB相同的相对性能作为支持数据库

更新:

正如@ruionwriting建议的那样,我描述了数据库,我发现,无论项目是在调试模式还是生产模式下运行,~2,000 sql命令都会花费相同的时间.(每个命令0毫秒).

但是,在调试模式下,20,000个命令之间的平均绝对时间差为5ms.

与生产模式相比,该组命令的平均时间差为0.3 ms.

这是大约10倍的时间性能差异,并将实体框架隔离为在调试模式下花费额外时间.

有没有办法配置调试版本,以便可以在没有调试标志的情况下引用EntityFramework?

如果我以某种方式通过一些编译器魔术来实现性能,那么在调试功能方面我会失去什么?目前我无法进入实体框架代码,所以我认为我不会错过任何东西.

谢谢!

asp.net performance intellitrace dbcontext entity-framework-5

13
推荐指数
1
解决办法
3137
查看次数

停止没有调试的项目

在visual studio中很容易停止正在调试的程序(Debug - > Start Debugging),但是有没有办法停止没有调试启动的程序(Debug - > Start Without Debugging)?

更新:从视觉工作室内部.

visual-studio-2012

9
推荐指数
2
解决办法
2323
查看次数

CORS 和内部服务器错误响应

在 ASP.NET WebApi2 中,如果存在内部服务器错误,即使启用了 CORS,也会在没有Access-Control-Allow-Origin 标头的情况下发送 500 响应。

这会导致浏览器报告 CORS 错误,而不是内部服务器错误。

我认为处于错误状态的服务器可能无法报告它将响应的来源,因此在我看来,浏览器应该处理这种特殊情况并报告内部错误,而不是 CORS 错误。

A ) 有没有办法让内部服务器错误显示在浏览器中作为我的请求失败的原因?

B) 浏览器是否应该就此提出问题?

asp.net google-chrome cors asp.net-web-api

4
推荐指数
1
解决办法
1342
查看次数

确定A系统是否使用C使用Big Endian或Little Endian

我很好奇这个函数是否会决定字节序.

如果整数someInt存储在little endian中,则测试是一个等于1的位掩码.

在位掩码中,将0x1000转换为匹配机器的endian样式还是"常量"?

#include <stdio.h>

int isBigEndian(){
    int someInt =0x0001;
    if(someInt & 0x0100 == 1) 
        return 1;
    else 
        return 0;
}

int main(){
    int returnVal = isBigEndian();
    printf("return val is %d", returnVal);
}
Run Code Online (Sandbox Code Playgroud)

c hex endianness

2
推荐指数
1
解决办法
2325
查看次数