2021-03-29 ~ 2021-04-05
一、AddSingleton AddScoped AddTransient
基本解释
- AddTransient:瞬时模式,每次请求,都获取一个新的实例。即使同一个请求获取多次也会是不同的实例
- AddScoped:每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例
- AddSingleton:单例模式,每次都获取同一个实例
未解之谜
- AddSingleton如果参数是一个普通的类,不是静态类,那会发生什么情况
- 这3个函数的的参数是什么,我看有些地方参数是接口和实现接口的类,有些是两个类
- 这3个的使用场景又是什么?
二、C#线程添加参数传递
string filename = ...
Thread thread = new Thread(() => download(filename));
thread.Start();
三、多线程
1、测试用例走多线程
- 测试高并发,在C#测试用例跑多线程。发现跑完啥都没有,异常捕获也啥都没有
- 后面发现是测试用例执行完了,代码也到最后了。就啥都没有
- 最后加上线程代码,就可以看到执行结果了。代码如下:
foreach(var item in threadList)
{
item.Join();
}
四、高并发优化
1、场景
- 业务中需要生成条码,发现在不支持高并发,需要优化一下。
2、代码情况
- 核心的代码有3段SQL操作。在高并发情况,出现了条码相同的情况。
3、解决方法
- 给这段代码加锁(3段SQL的操作)
五、FreeSql插入问题
1、场景
- 使用FreeSql插入泛型,代码如下(list是泛型)
DB.FMysql.Insert(list).ExecuteAffrows();
2、出现问题
3、原因(不明)
4、解决方案
1、将泛型改为实体类
5、总结
- 开始以为是数据库为空,查看发现里面该有的基本都有。后面经人提醒主键啥的,就想到了实体类和泛型是不是存在这样的区别。
6、Python装饰器
1、被装饰函数有返回值
1、场景及问题
有返回值的函数被装饰以后,原本的返回值出现了丢失
2、我的错误代码
def decoratorTime(fun):
'''统计函数调用时间的装饰器'''
@wraps(fun)
def warpFun(*args,**kwargs):
print('开始时间='+time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) )
fun(*args,**kwargs)
print('结束时间='+time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) )
return warpFun
3、修改后的代码
def decoratorTime(fun):
'''统计函数调用时间的装饰器'''
@wraps(fun)
def warpFun(*args,**kwargs):
print('开始时间='+time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) )
res = fun(*args,**kwargs)
print('结束时间='+time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) )
return res
return warpFun
4、总结
- 函数被装饰器装饰时,函数有返回值返回时,需要在装饰器内部调用处返回
- 在返回前后还有其他操作,需要在返回前调用(比如上面代码,在返回前打印出时间)