使用Immutable优化复制注意事项

这是Orleans中对于序列化检查类型是否支持Orleans内置的高速序列化时,使用Immutable<>包装和类型声明时,有ImmutableAttribute,效果是一样的。所以无需重复的对已经加了ImmutableAttribute的类型再次调用AsImmutable()

internal static bool IsOrleansShallowCopyable(this Type t)
        {
            if (t.IsPrimitive || t.IsEnum || t == typeof (string) || t == typeof (DateTime) || t == typeof (Decimal) ||
                t == typeof (Immutable<>))
                return true;

            if (t.GetCustomAttributes(typeof (ImmutableAttribute), false).Length > 0)
                return true;

            if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof (Immutable<>))
                return true;

            if (t.IsValueType && !t.IsGenericType && !t.IsGenericTypeDefinition)
            {
                bool result;
                lock (shallowCopyableValueTypes)
                {
                    if (shallowCopyableValueTypes.TryGetValue(t.TypeHandle, out result))
                        return result;
                }
                result = t.GetFields().All(f => !(f.FieldType == t) && f.FieldType.IsOrleansShallowCopyable());
                lock (shallowCopyableValueTypes)
                {
                    shallowCopyableValueTypes[t.TypeHandle] = result;
                }
                return result;
            }

            return false;
        }
时间: 2024-10-14 08:59:42

使用Immutable优化复制注意事项的相关文章

使用Immutable优化复制

Orleans有一个降低请求消息序列化开销的功能,这里将首先介绍序列化的工作方式,并解释如何使用这个降低开销的功能 Orleans中的Serialization 当在Orleans中发起一个对grain方法的请求时,Orleans Runtime 对请求的参数进行deep copy,这样是为了保护这些参数传递到目标grain之前被更改. 比如你的某个grain方法参数是一个C# 对象,在你调用grain方法后,在grain方法执行前,你修改了这个C#对象的属性值.deep copy之后,就无需担

mysql sql优化及注意事项

sql优化分析 通过slow_log等方式可以捕获慢查询sql,然后就是减少其对io和cpu的使用(不合理的索引.不必要的数据访问和排序)当我们面对具体的sql时,首先查看其执行计划A.看其是否使用索引B.查看其查询的记录数C.确定索引的代价是否过高D.是否可以使用复合索引E.是否有“using temporary”F.是否有“using filesort” 创建高效索引 mysql的innodb有自己特殊的聚集索引(数据是按聚集索引的顺序存储的并和索引存储在一起),索引访问效率较高,次要索引是

基于时间加权svm的指数优化复制策略

1 引言 指数追踪,利用某些金融资产组合去追踪某一股票指数,指数型基金核心技术.  目前主要有两种指数复制方法 基于两种假设 一:历史能够重演,在过去一段时间能构造历史追踪误差最小的,未来也将是最优,现在大多数指数复制类型为此类.二:从统计角度,找到与目标指数具有最大相关 具有协整关系的股票组合,保证未来表现与未来尽可能一致. 从股票数量复制角度,分为两种,完全复制和不完全复制,完全复制按照指数构造方式购买成分证券,但市场时序上变化迅速,造成成本高,逐渐不被使用.不完全复制根据优化方法寻找成分证

什么是SEO?网站seo分为哪些阶段?优化需注意事项有哪些?

企业建设网站都是为了能够让网站获取到更多的用户流量.大多都会采取有效的手段来促进流量的增长,seo就是其中常用的一种方式.网站优化成为众多企业选择的手段.但是优化是一个长期的过程,在短时间内不能达到理想的效果,对于没有耐心的企业来说,可能达不到自己想要的一个进度.但是对于了解的企业来说,即使知道需要时间但是没有专业的seo人员,网站排名也是不能得到一定的提升.很多新手小白都不懂如何优化网站,拿到一个新的站点也是一脸懵逼,我是谁,我要做什么?成都seo就给大家讲讲网站seo的阶段有哪些?在进行优化

网站优化重点注意事项

.可能很多的小白还不清楚,网站优化的重点在哪里,到底是站内优化重要还是站外优化重要,要知道的是,百度除了相关说明的,外链对网站的帮助已经越来越小,但是并不是代表就可以不去做.无论是继续释放外链条还是调整突破的方向,都将在你站的高度执行. 网站seo优化的重点 网站优化的第一件事是用户需要理解,也就是说,通过百度搜索中的关键词,结合现有数据或经验,用户最想了解关键词的内容是什么?你最关心的是什么?这对于SEO非常重要,只知道用户需要一个更好的网站来操作.当然,关键字需要分析一段时间才能被理解.你也

ios优化复制大文件时,如何使内存运用最少且效率最高

我也是纠结了好几天,我想自己想个办法,但是数据复制不上去,我现在还不明白,如果有人知道我错在哪了,请留言,如果还有更好的方法,请分享共同进步. ________________________________________用输入流进行文件的复制 //这是我原图片的路径 NSString *Path=[NSHomeDirectory() stringByAppendingPathComponent:@"2238-110H514215143.jpg"]; NSError *error;

锁的优化及注意事项

"锁"的竞争必然会导致程序的整体性能下降,以下就是为了降低这种辐作用的建议:     1.减小锁持有时间 如果线程持有锁的时间很长,那么相对地,锁的竞争程度也就越激烈.程序开发应该尽可能地减少对某个锁的占有时间,以减少线程间互斥的可能. public synchronized void syncMethod(){ othercode1(); mutextMethod(); othercode2();} 优化后: public void syncMethod2(){ othercode1

锁的优化及注意事项(读书笔记)

有助于提高锁性能的几点建议 减少锁的持有时间 真正需要同步加锁的时候在加锁,减少锁的持有时间有助于减低锁冲突的可能性,进而提升系统的并发能力, 减少颗粒度,所谓减少颗粒度就是指缩小锁定对象的范围,从而减少锁冲突的可能性,进而提升系统的并发能力,问题在于类似于size()获取全局信息的方法调用并不频繁时,这种减少颗粒度的方法才能真正意义上提高系统吞吐量.(分割数据结构实现) 读写分离锁替换独占锁,读写锁是对系统功能点的分割 ReadWriteLock 在读多写少的场合,读写锁对系统性能是很有好吃的

SQL优化及注意事项

1. 把数据.日志.索引放到不同的I/O设备上,增加读取速度.数据量(尺寸)越大,提高I/O越重要. 2. 纵向.横向分割表,减少表的尺寸,如:可以把大数据量的字段拆分表. 3. 根据查询条件,建立索引,优化索引.优化访问方式,限制结果集的数据量.注意填充因子要适当(最好是使用默认值0).索引应该尽量小,尽量使用字节数小的列建索引,不要对有限的几个值的列建单一索引. 4. 用OR的字句可以分解成多个查询,并且通过UNION链接多个查询.它们的速度只与是否使用索引有关,如果查询需要用到联合索引,用