本文转载自微信公众号“JeffckyShare”,作者Jeffcky。转载本文请联系JeffckyShare公众号。个人认为表演不能一蹴而就。需要结合实际业务有一个大概的评估或者预期,比如数据量的大小。如果预计短时间内不会达到性能瓶颈,也不必想太多,或者根据自我想象也有可能。有性能问题,所以大张旗鼓落入自觉流,最后可能落得苦不堪言。项目性能考虑之前个人写过一个版本的Excel导入导出,并没有使用相应的开源组件,因为导出导入逻辑并不复杂,不涉及单元格拆分,包含图片,下拉框等.,不过也好办没有难度,借助NPOI或者EPPLUS工具就可以满足了。于是我尝试进一步重构之前封装的Excel导入导出,主要解决之前遗留的问题:第一:表头列和实体属性列的顺序必须是一一对应的;第二种:导出由于Excel中单个sheet行的限制,超过一定的行数,必须重新建sheet。第三:大量使用反射。如果有多张Sheet,每张Sheet的行数稍多,会有一定的性能瓶颈。以上两点都可以轻松解决。这里我们忽略它。问题出在第三点,因为泛型的使用会为对象读取的每一行反映出来,同时获取它的实例属性并赋值,这里可以提高性能。接下来,我们将通过一个简单的例子来演示如何提高反射性能。当然,还有其他的解决办法。这里我只介绍我个人提高反射性能的方案。像一些开源组件,我们通过属性来标识属性,属性名和header列匹配,顺序不需要保持一致。同样的,基于上面的属性赋值也可以忽略。在这种情况下,我们想要获取对应实体所标识的属性特征。这里为了方便后续的属性赋值,我们缓存了属性相关的信息,避免频繁的通过反射获取属性信息。接下来,我们来进行属性的赋值和获取。我们以设置值为例,同理获取值,同时以10000为基数进行验证,然后增加这个基数,如下测试实体publicclassTest{publicintId{get;set;}publicstringName{get;set;}}反射属性赋值示例,如下:typeof(Test).GetProperty("Id");varpropertyNameInfo=typeof(Test).GetProperty("Name");foreach(vartestintests){propertyIdInfo.SetValue(test,1);propertyNameInfo.SetValue(test,"jeffcky");}Console.WriteLine($"反射赋值耗时:{stopWatch.ElapsedMilliseconds}ms");}当然根据笔记本的配置和使用的非标准耗时方案,结果会有所不同,但基本上可以判断反射时间会超过20ms接下来,我使用delegate方法直接调用property的Set方法,看性能会不会提升);varsetId=(Action
