每周学习笔记(第二周)


一、AddSingleton AddScoped AddTransient

基本解释

  1. AddTransient:瞬时模式,每次请求,都获取一个新的实例。即使同一个请求获取多次也会是不同的实例
  2. AddScoped:每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例
  3. AddSingleton:单例模式,每次都获取同一个实例

未解之谜

  1. AddSingleton如果参数是一个普通的类,不是静态类,那会发生什么情况
  2. 这3个函数的的参数是什么,我看有些地方参数是接口和实现接口的类,有些是两个类
  3. 这3个的使用场景又是什么?

二、C#线程添加参数传递

原文

string filename = ...
Thread thread = new Thread(() => download(filename));
thread.Start();

三、多线程

1、测试用例走多线程

  1. 测试高并发,在C#测试用例跑多线程。发现跑完啥都没有,异常捕获也啥都没有
  2. 后面发现是测试用例执行完了,代码也到最后了。就啥都没有
  3. 最后加上线程代码,就可以看到执行结果了。代码如下:
foreach(var item in threadList)
{
    item.Join();
}

四、高并发优化

1、场景

  1. 业务中需要生成条码,发现在不支持高并发,需要优化一下。

2、代码情况

  1. 核心的代码有3段SQL操作。在高并发情况,出现了条码相同的情况。

3、解决方法

  1. 给这段代码加锁(3段SQL的操作)

五、FreeSql插入问题

1、场景

  1. 使用FreeSql插入泛型,代码如下(list是泛型)
DB.FMysql.Insert(list).ExecuteAffrows();

2、出现问题

报错截图

3、原因(不明)

4、解决方案

1、将泛型改为实体类

5、总结

  1. 开始以为是数据库为空,查看发现里面该有的基本都有。后面经人提醒主键啥的,就想到了实体类和泛型是不是存在这样的区别。

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、总结

  1. 函数被装饰器装饰时,函数有返回值返回时,需要在装饰器内部调用处返回
  2. 在返回前后还有其他操作,需要在返回前调用(比如上面代码,在返回前打印出时间)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值