Giter Club home page Giter Club logo

Comments (10)

ldqk avatar ldqk commented on May 17, 2024

缓存编译的委托这个考虑过,但是每次的参数都是动态传入的,做缓存委托的话,倒不如直接缓存调用结果咯,缓存的复用性不高,而且这样可能会造成缓存无限膨胀

from masuit.tools.

ldqk avatar ldqk commented on May 17, 2024

如果你有改进的办法,欢迎提交PR

from masuit.tools.

hjkl950217 avatar hjkl950217 commented on May 17, 2024

我去看了一眼,只是调用方法,这种情况下只调用一次时确实用反射更好一点。

如果改进,要先明确

  1. 要不要加缓存? 或者纠结的话可以考虑增加一个可选参数,默认是不缓存的。如果调用的少,调用者知道重复率高而缓存。但如果是框架使用,可能只调用一次,命中率低就不传了。
  2. 反射还是表达式编译?不加缓存的情况下,反射要好一点。原代码也是要反射去找方法体的

from masuit.tools.

shuxinqin avatar shuxinqin commented on May 17, 2024

缓存的复用性高不高看情况吧。
不过即使没有好的解决方案,建议也不要每次都调用Compile,这样的做法性能损耗实在太大,比直接反射还可怕。
对Compile生成的委托调用要比反射调用快,但Compile操作是极其损耗资源,毕竟Compile是编译代码操作,编译过程你懂的...如果不对生成的委托进行缓存,运行效率反而适得其反.

from masuit.tools.

ldqk avatar ldqk commented on May 17, 2024

目前想到了一种:把参数也作为表达式的参数进行传递,这样就能编译缓存了,我先改代码尝试一下

from masuit.tools.

shuxinqin avatar shuxinqin commented on May 17, 2024

缓存无限膨胀这情况是会有,但我觉得问题不大,因为ef,json.net,protobuf-net等知名库都大量这样使用

from masuit.tools.

ldqk avatar ldqk commented on May 17, 2024

我放弃了,仔细想想,能够创建实例那就可以直接调用其方法啊,这几个InvokeMethod也没有存在的必要了🤣🤣

from masuit.tools.

shuxinqin avatar shuxinqin commented on May 17, 2024

哈哈,ReflectionUtil里面的方法定位是动态调用,有存在必要的。日常开发可能用的少,但是写库或者通用逻辑的时候用的很多。虽然我没直接使用Masuit.Tools,但以后可能也会搬Masuit.Tools里得一些类自用,看到了ReflectionUtil里的实现有些问题,还是想提醒一下,哈哈。

from masuit.tools.

ldqk avatar ldqk commented on May 17, 2024

算了,先这样吧,以后想到好的法子了再改

from masuit.tools.

hjkl950217 avatar hjkl950217 commented on May 17, 2024

ReflectionUtil:我要见委座!我为Masuit.Tools立过功,我为Masuit.Tools留过血!

留着吧,框架类型、实例、什么都是动态的,是有可能用到的,可以标记为废弃呗? 这样项目更新时用到了,也不至于报错了

from masuit.tools.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.