我刚刚看到这个看似无害的评论,对ArrayList和原始String数组进行基准测试.它来自几年前,但OP写道
我注意到使用String s:stringsList比使用旧式for循环访问列表慢约50%.去搞清楚...
没有人在原帖中评论它,测试看起来有点可疑(太短不准确),但是当我读到它时,我差点从椅子上掉下来.我从来没有对一个"传统"的循环增强循环进行基准测试,但我目前正在开发一个项目,它使用增强循环对ArrayList实例进行数亿次迭代,所以这是我关注的问题.
我打算做一些基准测试并在此发表我的发现,但这显然是我的一个大问题.我可以在网上找到关于相对性能的宝贵的小信息,除了一些随便提到的ArrayLists的增强循环在Android下运行速度慢得多.
有没有人经历过这个?这种性能差距是否仍然存在?我会在这里发布我的发现,但读到它时非常惊讶.我怀疑如果这个性能差距确实存在,它已经在更现代的VM中得到修复,但我想我现在必须做一些测试并确认.
更新:我对我的代码进行了一些更改,但是已经怀疑其他人已经指出的内容:确保增强的for循环速度较慢,但是在非常简单的紧密循环之外,成本应该是成本的一小部分.循环的逻辑.就我而言,即使我使用增强型循环迭代非常大的字符串列表,我在循环中的逻辑也足够复杂,甚至在切换到基于索引的循环之后我甚至无法测量差异.
TL; DR:增强循环确实比传统的基于索引的循环慢于arraylist; 但对于大多数应用来说,差异应该可以忽略不计.
我正在研究一个电子邮件项目.由于我不会在这里讨论的原因,对长电子邮件进行带引号可打印的编码在客户的环境中存在问题.
在我们发送的SMTP电子邮件的HTML和文本部分上执行base64编码似乎是一个可行的选择.在测试中,它似乎在几个测试客户端(如Gmail)中运行良好.
但是,我想知道这是否会在不同的电子邮件客户端中出现任何问题.从阅读RFC规范来看,看起来base64是文本部分的兼容编码,但对于我想知道是否存在任何潜在问题需要考虑的文本和HTML部分,这是不常见的.
看似有问题的事情:
有没有人可以分享经验?这似乎是一个很好的解决方案,但我想确保我没有遗漏一些东西.
因为我必须进行S2S集成,所以发布了几个版本,但我遇到了一个意想不到的问题,希望有人可以更有效地解决.
我有两个组织,通过S2S共享联系人.
每个组织中的联系人具有相同的模式,标准字段和自定义字段.我用两个自定义字段复制了一个基本案例:复选框字段A和数字(18,0)字段B.
组织1发布字段A,并订阅字段B.
组织2订阅字段A,并发布字段B.
组织1通过在S2S上与Org 2共享联系人来启动所有S2S工作流程.组织2已自动接受.
组织2具有"插入前插入"触发器,其仅使用字段A来计算字段B的值.例如,如果选中字段A,则将字段B填充为2,如果未选中,则填充为0.(这当然是过度简化的过度简化我真正需要做的,但它是基础可重复的案例.)
在Org 2中一切正常 - 联系人与A字段相遇很好,我看到字段结果计算到字段B.
问题是结果 - 字段B - 在下次联系更新之前不会自动共享回Org 1.它可以像我在Org 2中编辑同一个联系人上的非共享字段一样简单,例如"描述",然后我立即看到先前计算的字段B的值被推回到组织1.
我假设这是因为,因为字段B的计算发生在Before Insert中,所以S2S连接假定当前的更新事务仅由它自己执行(我可以看到这个逻辑如何有意义以防止无限的S2S更新循环).
我首先尝试创建一个工作流字段更新,在字段B更改时强制更新(新的,虚拟)共享字段,但仍然没有导致更新返回,可能是因为它在Salesforce认为免于重新执行的相同执行上下文中-sharing.还尝试了一个工作流规则,在更改字段时将Lead转发回连接队列,并且它也不起作用.
然后我在AfterUpdate触发器中尝试了重新更新语句 - 如果共享字段已更新,则重新加载并重新更新共享对象.这也行不通.
我找到了一个解决方案,这是一个由AfterUpdate触发器调用的Future方法,它重新加载并触及任何由BeforeUpdate触发器更改其共享字段的记录.这确实会导致现场结果在原始组织中以近乎实时的方式显示.
这个解决方案现在适用于我,但我觉得我必须遗漏一些东西.它导致执行更多的Future调用和DML,而不是必要的.
有人有更优雅的解决方案吗?
我对Android开发还很陌生,但我很难绕过内容提供商,特别是为单个应用程序,单数据库SQLite数据源创建一个(如果有的话)的好处.我可以看到,如果我想使用同步适配器,我需要一个内容提供商,但老实说,Sync API是如此令人沮丧,以至于我认为使用REST滚动我自己的远程同步过程没有任何优势.
我也看到通过在我的SQLite数据库上实现内容提供程序,我获得了一个有保证的Android管理单例,但我使用AndroidAnnotations可以为我做单例管理,它似乎不是我读过的它是只要我正确管理我的开放连接,甚至一定建议使用单一数据库帮助程序.
我错过了什么吗?对于单个数据库应用程序,Content Provider API看起来非常低级且容易出错.特别是"手动"管理URI映射并引入奇怪的抽象层似乎并没有增加太多价值.
那么本地SQLite DB的内容提供商是否有价值?如果是这样,是否有一些框架可以为我生成我的URI映射,或者它是否严格自行滚动?