huiwenyuedu 2023-01-28 09:29 采纳率: 28.6%
浏览 37
已结题

swift使用textkit读取大文本文件速度慢的问题

使用如多看阅读等能即时打开文本文件,而我开发的惠文阅读打开速度就很慢,特别是对大文本文件如天龙八部,要两三分钟才能打开,这是为什么,多看阅读他们采用了什么技术,我应该如何改进,请各位指点,谢谢!读取文件代码如下:

var titleString:NSString="连城诀"
            do{
                //var titleString:NSString?=try NSString(contentsOfFile: location, encoding: String.Encoding.utf8.rawValue)
                titleString=try NSString(contentsOfFile: DataViewController.location+DataViewController.shuming, encoding: String.Encoding.utf8.rawValue)        }catch let error {
                    print(error.localizedDescription)
                    print("文件读取失败")
                }
            
            let layoutManager = NSLayoutManager()
            let cunchu:NSTextStorage=NSTextStorage(string:titleString as String);
            cunchu.addLayoutManager(layoutManager)
            
            cunchu.addAttribute(NSAttributedString.Key.font, value: UIFont.systemFont(ofSize: DataViewController.zitidaxiao), range: NSMakeRange(0, titleString.length))
            let style=NSMutableParagraphStyle()
            style.lineSpacing=DataViewController.hangjudaxiao
            cunchu.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: NSMakeRange(0, titleString.length))
            let pageSize = CGSize(width: 384, height: 785)
            var ranges: [NSRange] = []
            i=0
            //var totalpages:Int=1000
            while true {
                let container=NSTextContainer(size: pageSize)
                layoutManager.addTextContainer(container)
                let rang=layoutManager.glyphRange(for: container)
                if rang.length <= 0 {
                    DataViewController.totalpages=i
                    break
                }
                ranges.append(rang)
                i += 1
            }
            
            var k:Int=0
            while (k<DataViewController.totalpages){
                
                let cunchufenduan=cunchu.attributedSubstring(from: ranges[k])
                DataViewController.stringfenduan.append(cunchufenduan.string)
                k += 1
            }
  • 写回答

5条回答 默认 最新

  • 社区专家-Monster-XH 2023-01-28 09:39
    关注

    有用请采纳:
    这段代码读取文件并进行文本布局和分页操作。瓶颈可能在于文件读取和布局计算上,特别是对于大文本文件。

    为了提高打开速度,可以考虑以下几点:

    1.优化文件读取:可以使用更快的文件读取方式,例如读取文件的部分内容而非全部内容。

    2.优化布局计算:可以使用缓存来降低布局计算的复杂度。

    3.优化代码:可以对代码进行优化,例如使用更高效的数据结构和算法。

    4.分块读取:对文件进行分块读取,每次读取一部分,不要一次性读取全部文件

    这些建议能够帮助您优化代码,提高阅读器的打开速度。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月5日
  • 已采纳回答 1月28日
  • 创建了问题 1月28日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装