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日

悬赏问题

  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题
  • ¥15 有没有人能解决下这个问题吗,本人不会编程
  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗