对于自我管理 ObjectContextManager的测试
书接上文,
把代码改为多线程,
public class Threads
{
public static void allStart()
{
for (int i = 0; i < 10; i++)
{
t1();
}
}
public static void t1()
{
var t = new Thread(() =>
{
Class1.Test();
});
t.IsBackground = true;
t.Start();
}
}
内在状况:

看了一下,CPU相当的同,但是内存已经没问题了。
现在从读的情况来看没什么问题。
把代码再改改。
public class Class1
{
private static Domain.Entities.Models.passportContext context;
static Class1()
{
context =
new Domain.Entities.Models.passportContext("passportContext");
context.Configuration.ProxyCreationEnabled = false;
context.Configuration.LazyLoadingEnabled = false;
var om = ((IObjectContextAdapter)context).ObjectContext.ObjectStateManager;
om.ObjectStateManagerChanged += om_ObjectStateManagerChanged;
}
public static void Test()
{
var start = int.MaxValue;
while (true)
{
var list = context.UserSources.OrderByDescending(x => x.UserId).Where(x => x.UserId < start).Take(100).ToList();
ObjectContext oc = ((IObjectContextAdapter)context).ObjectContext;
var m = oc.ObjectStateManager;
var a = list.First();
var count = GetUnchangedCount(context);
ClearUnchangedCache(context);
ClearKeylessEntityCache(context);
count = GetUnchangedCount(context);
Console.WriteLine(string.Format("[{0}]", Thread.CurrentThread.ManagedThreadId) + a.UserId);
//context.SaveChanges();
//ClearCache(context);
start = a.UserId;
}
}
然后这样就,呵呵了。

是的,对于多线程下,不能使用共享的Context。
下面也给出了解决方法。
看完这个以后,我顿时明白了。
我的错误在于,为了所谓的性能考虑。
使用了
public abstract class StatBase<TSource, TStat>
where TSource : class
where TStat : class
{
protected readonly GenericRepository<TSource> Sourcelog;
protected readonly GenericRepository<TStat> Stat;
protected readonly SingleFileLine Sfl;
private int sleep = 45;
public event EventHandler<InfoEventArgs> StateInfo;
protected virtual void OnStateInfo(InfoEventArgs e)
{
EventHandler<InfoEventArgs> handler = this.StateInfo;
if (handler != null) handler(this, e);
}
protected virtual void OnState(InfoEventArgs e)
{
EventHandler<InfoEventArgs> handler = this.StateInfo;
if (handler != null) handler(this, e);
}
protected virtual void OnState(string info)
{
EventHandler<InfoEventArgs> handler = this.StateInfo;
if (handler != null) handler(this, new InfoEventArgs
{
Info = info,
Time = System.DateTime.Now
});
}
protected StatBase()
{
this.Sourcelog = new GenericRepository<TSource>(AppIniter.DefaultConnection);
this.Stat = new GenericRepository<TStat>(AppIniter.DefaultConnection);
this.Sfl = new SingleFileLine(typeof(TStat).Name);
}
在构造中对Responstory进行实例化,然后再多线程中使用,所以就出现了上个文章中的问题。内存不断的增长。
那这样,改下程序,把实例化的过程放到线程中,每次使用实例化一个对象,然后超出作用域后就自动释放。
这是一个好的想法,但不帅了,不过,可以试试的。
代码就变成 了这样。
public abstract class StatBase<TSource, TStat>
where TSource : class
where TStat : class
{
protected GenericRepository<TSource> Sourcelog
{
get
{
return new GenericRepository<TSource>(AppIniter.DefaultConnection);
}
}
protected GenericRepository<TStat> Stat
{
get
{
return new GenericRepository<TStat>(AppIniter.DefaultConnection);
}
}
但是处理速度上明显就下去了。
*》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
其实整体上没有解决,没有按上面的路走下去,直接使用的就是 using(context)
对于自我管理 ObjectContextManager的测试的更多相关文章
- MagicNotes:自我管理中的破窗效应
MagicNotes,思绪随风飞扬,偶尔在这里停留. 在<程序员修炼之道——从小工到专家>这本书里,有这么一段描述: 在市区,有些建筑漂亮而整洁,而另一些却是破败不堪的“废弃船只”.为什么 ...
- 精力管理 | 迅速恢复精力的N个技巧,四个关键词以及自我管理的方法和工具列表
精力管理 | 迅速恢复精力的N个技巧,所谓坚持,是坚定的“持有”,这个“持”字很值得琢磨——不是扛.不是顶,而是“持”这样一个半放松的状态.如果你没做好自己该做的事情,如果你自己没有成长起来,随着年龄 ...
- 【纯手工】整理豆瓣热点推荐列表-财经&自我管理
[纯手工]整理豆瓣热点推荐列表-财经&自我管理 简七君 2013-10-27 09:40:06 豆瓣君的首页热点推荐实在难以捉摸,只有正好跳出推荐贴时才能按图索骥找列表.简七和小伙伴 ...
- [Azure DevOps] 管理测试计划、测试套件和测试用例
我喜欢测试计划,它能让团队清楚测试进度,还能妥善分配测试人员,更重要的是它能保证测试质量和效率.Azure DevOps 里提供了 Test Plans 这个模块用于管理测试计划. 1. Azure ...
- 【ELK】Centos7 安装 ELK 7.6.2 和 UI 管理界面以及测试例子
1. 初始化环境 1.0 初始化环境官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config ...
- 测试管理_出色测试管理者的思考[持续更新ing]
如何合理安排并按质按量按时完成每一个测试任务,做好项目管理? 如何把控到每一个测试任务的质量? 如何快速构建和构建好测试环境? 如何获取或快速制作测试数据? 如何确保每一个测试人员的工作都饱满? 如何 ...
- 高并发秒杀系统--Service事务管理与继承测试
[Spring IoC的类型及应用场景] [Spring事务使用方式] [Spring事务的特性] [Spring事务回滚的理解] [Service声明式事务的配置] 1.配置事务管理器 2.配置基 ...
- kubernetes容器集群管理启动一个测试示例
创建nginx 创建3个nginx副本 [root@master bin]# kubectl run nginx --image=nginx --replicas=3 kubectl run --ge ...
- Oracle管理监控之测试环境清理用户脚本
--PL/SQL块删除用户 declare cursor cur_duser is select sid, serial# from v$session where username in ( ...
随机推荐
- MySQL MVCC原理
1 MVCC基本原理 MVCC:多版本并发控制(MVCC,Multiversion Currency Control).一般情况下,事务性储存引擎不是只使用表锁,行加锁的处理数据,而是结合了MVCC机 ...
- pl/sql Command Window
由于工作需要,最近需要执行sql脚本,之前一直在用执行按钮操作,但最近公司制定了一套标准,其中就有执行sql脚本规范: 以前执行存存储过程: 现在修改存储过程如下: 第一步,打开对应窗口: 第二步,输 ...
- LCS(详解)
一,问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符串1:BDCABA:字符串2:ABCBDAB 则这两个字符串的最长公共子序列长 ...
- Objective-C入门 简介Cocoa框架
Cocoa Framework简称Cocoa,它是Mac OS X上的快速应用程序开发(RAD, Rapid Application Development)框架,一个高度面向对象的(Object O ...
- Java虚拟机(一):JVM的运行机制
一.JVM启动流程 通过java +xxx(或javaw)启动java虚拟机 装载配置,会在当前路径中寻找jvm的config配置文件. 根据查找jvm.dll文件.这个文件就是java虚拟机的主要实 ...
- 使用百度翻译的API接口
http://api.fanyi.baidu.com/api/trans/product/desktop 这是申请的接口地址,会得到一个APPID和一个钥密 然后下载PHP的对应的代码 有一个PHP文 ...
- Apr编程
一.简介 http://www.xuebuyuan.com/2195578.html 二.教程 http://dev.ariel-networks.com/apr/
- Django框架 之 数据库与ORM
浏览目录 数据库的配置 ORM表模型 ORM之增(create,save) ORM之删(delete) ORM之改(update和save) ORM之查(filter,value) 一.数据库的配置 ...
- Entity Framework 6.0 Tutorials(3):Code-based Configuration
Code-based Configuration: Entity Framework 6 has introduced code based configuration. Now, you can c ...
- HDU 3368 Reversi (暴力,DFS)
题意:给定一个8*8的棋盘,然后要懂黑白棋,现在是黑棋走了,问你放一个黑子,最多能翻白子多少个. 析:我是这么想的,反正才是8*8的棋盘,那么就暴吧,反正不会超时,把每一个格能暴力的都暴力,无非是上, ...