热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在c#中打印文本框的行号

这将是一个很长的帖子.如果有任何关于我正在遵循的程序,我想提出建议.我想要最好的方法在richtextbox中的每个CRLF终止行旁边打印行号.我正在使用C#和.NET.我尝试过使

这将是一个很长的帖子.如果有任何关于我正在遵循的程序,我想提出建议.我想要最好的方法在richtextbox中的每个CRLF终止行旁边打印行号.我正在使用C#和.NET.我尝试过使用ListView,但是当行数增加时效率很低.我已经成功地在自定义控件中使用Graphics来打印行号,到目前为止我对性能感到满意.

但随着行数增加到50K到100K,滚动受到严重影响.我已经覆盖了WndProc方法并处理了所有消息,只在需要时调用行号打印. (重写OnContentsResized和OnVScroll会对打印方法进行冗余调用).

现在行号打印很好,当行数小到高达10K(我很好,因为它很少需要编辑10000行的文件)但我想删除限制.

几点观察

> richtexbox中显示的行数是常量-1.因此,性能差异应归因于大文本,而不是因为我使用的是图形绘画.
>与小文件相比,大文本的绘制行号较慢

现在的伪代码

FIRST_LINE_NUMBER = _textBox.GetFirstVisibleLineNumber();
LAST_LINE_NUMBER = _textBox.GetLastVisibleLineNUmber();
for(loop_from_first_to_last_line_number)
{
Y = _textBox.GetYPositionOfLineNumber(current_line_number);
graphics_paint_line_number(current_line_number, Y);
}

我正在使用GetCharIndexFromPosition并遍历RichTextBox.Lines以查找获取行号的两个函数中的行号.要获得Y位置,我使用GetPositionFromCharIndex来获取Point结构.

所有上述RichTextBox方法似乎都是O(n),这会降低性能. (如果我错了,请纠正我.)

我决定使用二叉树来存储行号,以便在通过char索引搜索行号时提高搜索性能.我有一个想法是获得一个数据结构,它需要O(n)构造时间,O(nlgn)最坏情况更新和O(lgn)搜索.

这种方法值得付出努力吗?
有没有其他方法可以解决这个问题?如果需要,我准备从头开始编写控件,我只是希望它重量轻,速度快.

解决方法:

在决定最佳前进方向之前,我们需要确保了解瓶颈.

首先,重要的是要知道RichTextbox(我假设您正在使用它如何提到)处理大文件.所以我建议删除所有行打印的内容,看看它是如何用大文本执行的.如果它很差,那就有你的问题.

第二步是放置一些分析语句或只使用分析器(一个VS 2010附带)来找到瓶颈.它可能会成为查找行号或其他内容的方法.

在这一点上,我只会建议更多的调查.如果您已完成调查并获得更多信息,请更新您的问题,我会相应地回复您.


推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
好好_haohao_100
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有