使用实体框架时,试图读取或写入受保护的内存

本文关键字:受保护 内存 读取 实体 框架 | 更新日期: 2023-09-27 18:05:43

类型为'System '的未处理异常。AccessViolationException'发生在StatCentric.Tracker.Worker.dll

附加信息:试图读写受保护的内存。这通常表明其他内存已损坏。

我读了很多关于Stack Overflow和各种博客的文章,似乎找不到解决这个问题的方法。

我在做一些非常基本的事情:

public void Execute(ITrackerRequestModel model)
{
    PageviewRequest p = (PageviewRequest)model;
    using (var db = new StatCentricEntities())
    {
        db.SetTimeout(60);
        db.sp_Log_PageView2(p.SiteId, p.DateTimeUtc, p.vid, p.QueryString, p.p, p.t);
    }
}

但是这个错误弹出每次我试图调用db.sp_Log_PageView2。这似乎只发生在我的工作者角色(我使用Windows Azure)。

同样值得注意的是,我正在使用Windows Azure模拟器,我是在Windows 8.1。

我试过以下方法:

  1. 正在进行winsocket重置
  2. 禁用JIT调试(本机、脚本、托管)
  3. 在模块加载时禁用JIT调试
  4. 跟进了一些老帖子,修复了一些似乎是。net特有的热点问题
  5. 做内存诊断,没有问题,以确保它不是我的硬件。

我以管理员身份运行Visual Studio并连接到Azure中托管的远程SQL Server数据库。

如果您对如何解决或进一步诊断此问题有任何想法,我将不胜感激。

使用实体框架时,试图读取或写入受保护的内存

这不是真正的修复,但在等待微软修复时,您可以使用此解决方案。

我有同样的问题。我也尝试了各种方法来解决这个问题。几天后,我放弃了,使用手动"变通"。复制和转换现有的进程调用到新的调用只需要几分钟。

忽略自动生成的函数,手动调用存储过程。您可以为返回的数据使用自动生成的类。复制和修改现有的函数,你将很容易得到正确的参数名称和类型。

将部分类实现到不同的文件:

public partial class StatCentricEntities
{
    public virtual List<sp_Log_PageView2_Result> my_sp_Log_PageView2(
        Guid? siteId, 
        DateTime time, 
        string param3, 
        string param4 )
    {
        return Database.SqlQuery<sp_Log_PageView2_Result>(
               "sp_Log_PageView2 @siteId @time @param3 @param4",
                new SqlParameter("siteId", siteId),
                new SqlParameter("time", time),
                new SqlParameter("param3", param3),
                new SqlParameter("param4", param4)).ToList();
    }
}

我得到这个"试图读取或写入受保护的内存异常"错误,而使用SQL Server存储过程的输出参数类型为'日期'。我尝试了各种方法都没有成功,为了节省时间,我决定采用下面的解决办法。

1)删除date类型的输出参数

2)通过select语句返回字符串

SELECT CONVERT(char(10), @AsOfDate, 20) AS AsOfDate

3)将存储过程返回的字符串转换为c#中的DateTime值

DateTime asOfDate = DateTime.Now;
using (var context = new DA.MyEntities())
{
    var procResult = context.myStoredProcedure(myParameter).FirstOrDefault();
    DateTime.TryParse(procResult, out asOfDate);
}

我对这种妥协不是很满意,但它确实让我向前迈进了。

相关文章: