Blackberry PIM为什么联系人创建如此缓慢?

如何解决Blackberry PIM为什么联系人创建如此缓慢?

| 以下代码是我从blackberry论坛上获取的,花费了将近26分钟的时间,才能在8500系列设备上使用BB PIM API创建2000个随机联系人。有谁知道为什么要花这么长时间或如何提高通讯录中联系人创建的性能?
public static void testContactCreation() {
    ContactList contacts = null;
    try {
      contacts = (ContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST,PIM.READ_WRITE);
    } catch (PIMException e) {
      // An error occurred
      return;
    }

    String arrSzCities[] = {\"Birmingham\",\"Walsall\",\"Wolverhampton\",\"Banbury\",\"Bromsgrove\",\"Lichfield\",\"Balsall Heath\",\"West Bromich\",\"Smethwick\",\"Scott Arms\",\"Perry Barr\",\"Small Heath\",\"Acocks Green\",\"Great Barr\",\"Harborne\",\"Selly Oak\",\"Newtown\",\"Hockley\",\"Nuneaton\",\"Stafford\",\"Stoke\",\"Sandwell\",\"Brierly Hill\",\"Longbridge\",\"Sutton Coldfield\",\"Tamworth\",\"Coventry\",\"Rugby\",\"Hall Green\",\"Olton\",\"Dorridge\",\"Lapworth\",\"Shirley\",\"Wythall\",\"Warwick\",\"Dudley\",\"Barnt Green\",\"Tile Hill\",\"Berkswell\",\"Canley\",\"Yardley\",\"Yardley Wood\",\"Bordesley Green\",\"Cosely\",\"Four Oaks\",\"Erdington\",\"Aston\",\"Duddington\"};

    String arrSzCountries[] = {\"England\",\"Wales\",\"Scotland\",\"Northern Ireland\",\"Eire\",\"Spain\",\"France\",\"Italy\",\"Monaco\",\"Switzerland\",\"Austria\",\"Germany\",\"Lapland\",\"Estonia\",\"Hungary\",\"Slovakia\",\"Slovenia\",\"Czech Republic\",\"Latvia\",\"Holland\",\"Belgium\",\"Luxembourg\",\"Iceland\",\"Finland\",\"Denmark\",\"Norway\"};

    String arrSzFamilyNames[] = {\"SMITH\",\"JOHNSON\",\"WILLIAMS\",\"BROWN\",\"JONES\",\"MILLER\",\"DAVIS\",\"GARCIA\",\"RODRIGUEZ\",\"WILSON\",\"MARTINEZ\",\"ANDERSON\",\"TAYLOR\",\"THOMAS\",\"HERNANDEZ\",\"MOORE\",\"MARTIN\",\"JACKSON\",\"THOMPSON\",\"WHITE\",\"LOPEZ\",\"LEE\",\"GONZALEZ\",\"HARRIS\",\"CLARK\",\"LEWIS\",\"ROBINSON\",\"WALKER\",\"PEREZ\",\"HALL\",\"YOUNG\",\"ALLEN\",\"SANCHEZ\",\"WRIGHT\",\"KING\",\"SCOTT\",\"GREEN\",\"BAKER\",\"ADAMS\",\"NELSON\",\"HILL\",\"RAMIREZ\",\"CAMPBELL\",\"MITCHELL\",\"ROBERTS\",\"CARTER\",\"PHILLIPS\",\"EVANS\",\"TURNER\",\"TORRES\",\"PARKER\",\"COLLINS\",\"EDWARDS\",\"STEWART\",\"FLORES\",\"MORRIS\",\"NGUYEN\",\"MURPHY\",\"RIVERA\",\"COOK\",\"ROGERS\",\"MORGAN\",\"PETERSON\",\"COOPER\",\"REED\",\"BAILEY\",\"BELL\",\"GOMEZ\",\"KELLY\",\"HOWARD\",\"WARD\",\"COX\",\"DIAZ\",\"RICHARDSON\",\"WOOD\",\"WATSON\",\"BROOKS\",\"BENNETT\",\"GRAY\",\"JAMES\",\"REYES\",\"CRUZ\",\"HUGHES\",\"PRICE\",\"MYERS\",\"LONG\",\"FOSTER\",\"SANDERS\",\"ROSS\",\"MORALES\",\"POWELL\",\"SULLIVAN\",\"RUSSELL\",\"ORTIZ\",\"JENKINS\",\"GUTIERREZ\",\"PERRY\",\"BUTLER\",\"BARNES\",\"FISHER\",\"HENDERSON\",\"COLEMAN\",\"SIMMONS\",\"PATTERSON\",\"JORDAN\",\"REYNOLDS\",\"HAMILTON\",\"GRAHAM\",\"KIM\",\"GONZALES\",\"ALEXANDER\",\"RAMOS\",\"WALLACE\",\"GRIFFIN\",\"WEST\",\"COLE\",\"HAYES\",\"CHAVEZ\",\"GIBSON\",\"BRYANT\",\"ELLIS\",\"STEVENS\",\"MURRAY\",\"FORD\",\"MARSHALL\",\"OWENS\",\"MCDONALD\",\"HARRISON\",\"RUIZ\",\"KENNEDY\",\"WELLS\",\"ALVAREZ\",\"WOODS\",\"MENDOZA\",\"CASTILLO\",\"OLSON\",\"WEBB\",\"WASHINGTON\",\"TUCKER\",\"FREEMAN\",\"BURNS\",\"HENRY\",\"VASQUEZ\",\"SNYDER\",\"SIMPSON\",\"CRAWFORD\",\"JIMENEZ\",\"PORTER\",\"MASON\",\"SHAW\",\"GORDON\",\"WAGNER\",\"HUNTER\",\"ROMERO\",\"HICKS\",\"DIXON\",\"HUNT\",\"PALMER\",\"ROBERTSON\",\"BLACK\",\"HOLMES\",\"STONE\",\"MEYER\",\"BOYD\",\"MILLS\",\"WARREN\",\"FOX\",\"ROSE\",\"RICE\",\"MORENO\",\"SCHMIDT\",\"PATEL\",\"FERGUSON\",\"NICHOLS\",\"HERRERA\",\"MEDINA\",\"RYAN\",\"FERNANDEZ\",\"WEAVER\",\"DANIELS\",\"STEPHENS\",\"GARDNER\",\"PAYNE\",\"KELLEY\",\"DUNN\",\"PIERCE\",\"ARNOLD\",\"TRAN\",\"SPENCER\",\"PETERS\",\"HAWKINS\",\"GRANT\",\"HANSEN\",\"CASTRO\",\"HOFFMAN\",\"HART\",\"ELLIOTT\",\"CUNNINGHAM\",\"KNIGHT\"};

    String arrSzFirstNames[] = {\"MARY\",\"PATRICIA\",\"LINDA\",\"BARBARA\",\"ELIZABETH\",\"JENNIFER\",\"MARIA\",\"SUSAN\",\"MARGARET\",\"DOROTHY\",\"LISA\",\"NANCY\",\"KAREN\",\"BETTY\",\"HELEN\",\"SANDRA\",\"DONNA\",\"CAROL\",\"RUTH\",\"SHARON\",\"MICHELLE\",\"LAURA\",\"SARAH\",\"KIMBERLY\",\"DEBORAH\",\"JESSICA\",\"SHIRLEY\",\"CYNTHIA\",\"ANGELA\",\"MELISSA\",\"BRENDA\",\"AMY\",\"ANNA\",\"REBECCA\",\"VIRGINIA\",\"KATHLEEN\",\"PAMELA\",\"MARTHA\",\"DEBRA\",\"AMANDA\",\"STEPHANIE\",\"CAROLYN\",\"CHRISTINE\",\"MARIE\",\"JANET\",\"CATHERINE\",\"FRANCES\",\"ANN\",\"JOYCE\",\"DIANE\",\"ALICE\",\"JULIE\",\"HEATHER\",\"TERESA\",\"DORIS\",\"GLORIA\",\"EVELYN\",\"JEAN\",\"CHERYL\",\"MILDRED\",\"GERALD\",\"KEITH\",\"SAMUEL\",\"JOHN\",\"ROBERT\",\"MICHAEL\",\"WILLIAM\",\"DAVID\",\"RICHARD\",\"CHARLES\",\"JOSEPH\",\"CHRISTOPHER\",\"DANIEL\",\"PAUL\",\"MARK\",\"DONALD\",\"GEORGE\",\"KENNETH\",\"STEVEN\",\"EDWARD\",\"BRIAN\",\"RONALD\",\"ANTHONY\",\"KEVIN\",\"JASON\",\"MATTHEW\",\"GARY\",\"TIMOTHY\",\"JOSE\",\"LARRY\",\"JEFFREY\",\"FRANK\",\"ERIC\",\"STEPHEN\",\"ANDREW\",\"RAYMOND\",\"GREGORY\",\"JOSHUA\",\"JERRY\",\"DENNIS\",\"WALTER\",\"PATRICK\",\"PETER\",\"HAROLD\",\"DOUGLAS\",\"CARL\",\"ARTHUR\",\"ROGER\",\"JOE\",\"JUAN\",\"JACK\",\"ALBERT\",\"JONATHAN\",\"JUSTIN\",\"TERRY\"};

    String arrSzEmailProviders[] = {\"google\",\"yahoo\",\"wanadoo\",\"freemail\",\"aol\",\"yellowmellow\",\"redmail\",\"bt\",\"tiscali\",\"naims\",\"bulldog\",\"demon\",\"virgin\",\"sky\",\"orange\",\"vodaphone\",\"o2\",\"three\",\"britishgas\",\"npower\",\"britishtelecom\",\"royalmail\",\"parcelforce\",\"dhl\",\"usps\",\"ford\",\"rover\",\"fiat\",\"seat\",\"volvo\",\"bmw\",\"landrover\",\"jaguar\",\"warburtons\",\"kingsmill\",\"hovis\",\"walkers\",\"cadburys\",\"ironbru\",\"redbull\",\"jura\"};

    String arrSzAlphas[] = {\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\"};

    String arrSzStreetSuffixes[] = {\"Road\",\"Street\",\"Crescent\",\"Close\",\"Way\",\"Mews\",\"Common\",\"Alley\",\"Grove\",\"Place\",\"Mill\",\"Manor\",\"Lane\",\"March\",\"Hill\",\"Park\",\"Passage\",\"Path\",\"Row\",\"Square\",\"Terrace\",\"View\"};

    String arrSzStreetNames[] = {\"High\",\"Station\",\"Main\",\"Church\",\"London\",\"Victoria\",\"Albert\",\"Green\",\"Queens\",\"New\",\"Grange Road\",\"Kings Road\",\"North\",\"West\",\"South\",\"East\",\"Windsor\",\"Highfield\",\"Alexander\",\"York\",\"St. John\'s\",\"Broad\",\"Springfield\",\"George\",\"Manchester\",\"Richmond\",\"School\",\"Stanley\",\"Chester\",\"Aghaloo\",\"Picadilly\",\"**bleep**\",\"Wooburn\",\"Crazies\",\"Valentia\",\"Luton\",\"Croydon\",\"Rookery\",\"Coronation\",\"Dawlish\",\"Tiverton\",\"Dartmouth\",\"Hubert\",\"Bristol\",\"Arley\",\"Grange\",\"Dale\",\"Serpentine\",\"Bournebrook\",\"University\",\"Holly\",\"Kitchener\",\"Millner\",\"Westminster\",\"Cherrington\",\"Gristhorpe\",\"Kensington\",\"Cartland\",\"Horatio\",\"Ethelbert\",\"Hornblower\",\"Hanky Panky\",\"Bewdley\",\"Acorn\",\"Berry\",\"Moor\",\"Brent\",\"Mungo Jerry\",\"Highbury\",\"Howell\",\"Tenbury\",\"Peacock\",\"Hartswell\"};

    Random generator = new Random(1628434416);
    for (int i = 0; i < 2000; i++) {
      Contact contact = contacts.createContact();
      String[] addr = new String[contacts.stringArraySize(Contact.ADDR)];
      String[] szName = new String[contacts.stringArraySize(Contact.NAME)];

      // Family Name
      if (contacts.isSupportedArrayElement(Contact.NAME,Contact.NAME_FAMILY))
        szName[Contact.NAME_FAMILY] = arrSzFamilyNames[generator.nextInt(arrSzFamilyNames.length)];
      // First Name
      if (contacts.isSupportedArrayElement(Contact.NAME,Contact.NAME_GIVEN))
        szName[Contact.NAME_GIVEN] = arrSzFirstNames[generator.nextInt(arrSzFirstNames.length)];
      // Add name to contact
      contact.addStringArray(Contact.NAME,PIMItem.ATTR_NONE,szName);

      // Postcode (UK format)
      if (contacts.isSupportedArrayElement(Contact.ADDR,Contact.ADDR_POSTALCODE))
        addr[Contact.ADDR_POSTALCODE] =
            arrSzAlphas[generator.nextInt(arrSzAlphas.length)] + arrSzAlphas[generator.nextInt(arrSzAlphas.length)]
                + Integer.toString(generator.nextInt(99)) + Integer.toString(generator.nextInt(9)) + \" \"
                + arrSzAlphas[generator.nextInt(arrSzAlphas.length)] + arrSzAlphas[generator.nextInt(arrSzAlphas.length)];

      // Street and number
      if (contacts.isSupportedArrayElement(Contact.ADDR,Contact.ADDR_STREET))
        addr[Contact.ADDR_STREET] = Integer.toString(generator.nextInt(999)) + \" \"
            + arrSzStreetNames[generator.nextInt(arrSzStreetNames.length)]
            + \" \" + arrSzStreetSuffixes[generator.nextInt(arrSzStreetSuffixes.length)];

      // Locality
      if (contacts.isSupportedArrayElement(Contact.ADDR,Contact.ADDR_LOCALITY))
        addr[Contact.ADDR_LOCALITY] = arrSzCities[generator.nextInt(arrSzCities.length)];
      // Country
      if (contacts.isSupportedArrayElement(Contact.ADDR,Contact.ADDR_COUNTRY))
        addr[Contact.ADDR_COUNTRY] = arrSzCountries[generator.nextInt(arrSzCountries.length)];
      if (contacts.isSupportedField(Contact.ADDR))
        contact.addStringArray(Contact.ADDR,Contact.ATTR_HOME,addr);

      // Email address
      if (contacts.isSupportedField(Contact.EMAIL)) {
        contact.addString(Contact.EMAIL,Contact.ATTR_HOME | Contact.ATTR_PREFERRED,szName[Contact.NAME_GIVEN] + \".\" + szName[Contact.NAME_FAMILY] + \"@\" + arrSzEmailProviders[generator.nextInt(arrSzEmailProviders.length)] + \".com\");
      }

      // Telephone numbers (work and home)
      String szTelHome = \"\";
      String szTelWork = \"\";
      for (int j = 0; j < 7; j++) {
        String szDigit = Integer.toString(generator.nextInt(9));
        szTelHome = szTelHome + szDigit;
        szTelWork = szDigit + szTelWork;
      }
      if (contacts.isSupportedField(Contact.TEL)) {
        contact.addString(Contact.TEL,szTelHome);
      }
      if (contacts.isSupportedField(Contact.TEL)) {
        contact.addString(Contact.TEL,Contact.ATTR_WORK,szTelHome);
      }

      try {
        contact.commit();
      } catch (PIMException e) {
        // An error occured

      }
    }

    try {
      contacts.close();
    } catch (PIMException e) {
    }
  }
    

解决方法

        Hm .. 2000分钟接触26分钟意味着每1个接触780毫秒。 1)。您能检查一下ѭ1不是最耗时的电话吗?您可以使用smth这样比较准确地做到这一点:
long timeSpentOnCommits; // defined somewhere at a top level
...
long start = System.currentTimeMillis();
contact.commit();
long taken = System.currentTimeMillis() - start;
timeSpentOnCommits += taken;
...
// then after the all contacts have been added you can get 
// an average commit time:
long timePerOneCommit = timeSpentOnCommits / 2000;
// view the got value in a `Dialog` or some logging
如果花费大多数时间,那么我认为您无法改进它。 2)。另一个想法-在\'for \'循环中,您创建了太多的“ 3”对象,因此这迫使OS过于频繁地调用垃圾回收(这很耗时)。 改用
StringBuffer
。因此,而不是
addr[Contact.ADDR_POSTALCODE] =
    arrSzAlphas[generator.nextInt(arrSzAlphas.length)]
    + arrSzAlphas[generator.nextInt(arrSzAlphas.length)]
    + Integer.toString(generator.nextInt(99)) 
    + Integer.toString(generator.nextInt(9)) 
    + \" \"
    + arrSzAlphas[generator.nextInt(arrSzAlphas.length)]
    + arrSzAlphas[generator.nextInt(arrSzAlphas.length)];
用这个:
addr[Contact.ADDR_POSTALCODE] = new StringBuffer()
    .append(arrSzAlphas[generator.nextInt(arrSzAlphas.length)])
    .append(arrSzAlphas[generator.nextInt(arrSzAlphas.length)])
    .append(generator.nextInt(99))
    .append(generator.nextInt(9))
    .append(\' \')
    .append(arrSzAlphas[generator.nextInt(arrSzAlphas.length)])
    .append(arrSzAlphas[generator.nextInt(arrSzAlphas.length)])
    .toString();
请注意,任何原始类型都将重载“ 7”,因此它可以直接接受int和char,而无需转换为“ 3”对象。 电话号码生成应使用相同的方法。 3)。通过从\'for \'循环中提取所有重复调用,可以提高速度。例如,仅计算调用ѭ9的次数(2000次迭代*每个迭代4次调用= 8000次!),而您可以只在循环之前调用一次,并将其存储在循环可见的最终局部变量中。一组
contacts.isSupportedXXXX
调用也是如此-您不应一遍又一遍地调用它,而应在循环开始之前调用一次。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-