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

2024-03-11

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

但当行数增长到 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);
}

我在用从位置获取字符索引并循环遍历 RichTextBox.Lines 以在获取行号的两个函数中查找行号。为了获得 Y 位置,我正在使用从字符索引获取位置得到Point结构。

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

我决定使用二叉树来存储行号,以提高通过字符索引搜索行号时的搜索性能。我有一个想法,得到一个需要 O(n) 构建时间、O(nlgn) 最坏情况更新和 O(lgn) 搜索的数据结构。

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


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

首先,了解 RichTextbox(我假设您正在使用它)如何处理大文件非常重要。因此,我建议删除所有行打印内容,看看它在大文本上的表现如何。如果很穷,那就是你的问题。

第二步是放置一些分析语句或仅使用分析器(VS 2010 附带的一个)来查找瓶颈。它可能是查找行号的方法,或者其他东西。

此时我只建议更多调查。如果您已完成调查并了解更多信息,请更新您的问题,我会相应地回复您。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop

随机推荐

  • XDocument.Load(feedUrl) 返回“根级别的数据无效。第 1 行,位置 1。”

    首先 这更多的是一个解决方案 而不是一个问题 我花了一段时间才解决 所以我认为我的解决方案值得分享 我试图使用加载 RSS 提要XDoument Load feedUrl 并收到上述异常 我检查了养活自己 http www limun hr
  • 允许来自 env 的 mod_rewrite 而不是 .htaccess 中的 mod_setenvif

    我试图使用 htaccess 和 Apache 2 2 控制对测试站点 主机的访问 但不控制对生产站点的访问 我使用 mod rewrite 来检测主机名并设置一些用于控制站点各个方面的环境变量 但无法利用它来控制访问 我只能使用 mod
  • 中文字符以粗体呈现

    Silverlight 在文本框中将少数中文字符呈现为粗体 该文本框没有设置字体系列 请参考以下截图 在上面的屏幕截图中 第一个字符比另一个字符更粗 MSDN 的一篇帖子说这是因为字体系列问题和设置SimSun字体系列应该可以解决这个问题
  • 如何更改 matplotlib 中的当前轴实例(即 gca())

    我用一个技巧绘制高度与主轴匹配的颜色条 http matplotlib org mpl toolkits axes grid users overview html colorbar whose height or width in syn
  • 生成唯一的随机字符串

    我正在用 Dancer 编写一个非常小的 URL 缩短器 它使用 REST 插件将发布的 URL 存储在数据库中 该数据库包含六个字符串 用户可以使用该字符串来访问短 URL 现在我对我的随机字符串生成方法有点不确定 sub generat
  • 使用 movefolder 方法时找不到 vbscript 错误路径

    我对 vbscript 相当陌生 并尝试编写一个脚本来获取带有月份和年份标记的文件夹 2012 04 并将它们移动到带有年份标记的文件夹 2012 当我尝试移动文件夹时 我收到 路径未找到 错误 并且我似乎无法在任何地方找到有关其发生原因的
  • 如何计算字符串语句

    给定一个作为计算语句的字符串组合 我怎样才能得到结果 在本例中是下面代码中的列 cal 我知道我可以使用案例 但是有没有直接的方法来进行计算 create table tl test cl1 int create table tl test
  • WPF 的现代 UI - 导航

    如何在页面之间传递参数 我尝试向页面 uri 添加参数 但它不起作用 因为我无法在用户控件上使用 onNavieratedTo 事件 请帮忙 您必须使用 OnFragmentNavigation public void OnFragment
  • 使用 CameraX 的长焦镜头进行变焦

    在我的应用程序中 变焦仅限于主镜头 而不是设备的长焦镜头 如果有的话 长焦镜头可以由任何制造商提供 我不希望实现特定于制造商设备的 API 来访问长焦或广角镜头 这会导致照片质量较差 并且应用程序无法变焦至超过主摄像头的变焦限制 如何使用长
  • 一页上有多个引导轮播,只能控制一个

    我在视图中一次性加载了动态数量的轮播 但我只能滚动浏览渲染的第一个轮播 我怎样才能控制所有加载的 一次只能查看一个轮播 其他轮播被隐藏 myCarousel carousel interval 10000 carousel item eac
  • 我可以在 Julia 中专门化类型定义吗?

    Julia 的参数类型实际上定义了一系列包含不同内存布局的类型 我想知道这是否也适用于复合类型中的字段名称和数量 一个简单的例子如下 type mytype Float64 a Float64 b Float64 end type myty
  • Bigquery 流:“由于超时而无法插入 XX 行”

    最近几天 我们的直播遇到了 Failed to insert XX rows First error errors reason timeout index YY 在过去半个月的连续流式数据源和程序脚本不变的情况下 之前没有发现过这样的故障
  • C++ 获得整数除法和余数的最佳方法

    我只是想知道 如果我想将 a 除以 b 并且对结果 c 和余数都感兴趣 例如 假设我有秒数并想将其分成分钟和秒 那么最好的方法是什么去做吧 可不可能是 int c int a b int d a b or int c int a b int
  • 在Python中快速绘制数据

    我正在尝试使用 arduino 绘制来自 mpu6050 imu 的数据 MPU6050 发送数据的速度比绘图快 Arduino 代码从串口提供 6 个数据 即偏航 俯仰 滚动 轴 ay 和 az 我需要快速情节的建议 Python代码 i
  • SQL LIMIT 按 id 列

    我有以下声明 SELECT s u fname u lname aif airport FROM services s INNER JOIN airports in flight aif ON s id aif service id INN
  • Ocaml 模块实现

    Ocaml的标准库包含各种模块 List Map Nativeint等等 我知道提供了这些模块的接口 例如 列表模块 http caml inria fr pub docs manual ocaml libref List html 但我对
  • Php 与 NetBeans:在没有实际声明的情况下应用新的 PhpDoc

    有没有一种方法可以应用新的 PhpDoc 而无需重新声明方法 例如我有一个类 class GeneralContainer private children public function construct this gt childre
  • Swift 不会播放链接中的音频 - iOS

    我正在使用 Subsonic 因此 mp3 文件是通过网络服务提供给我的 当我使用具有 mp3 扩展名的文件进行测试时 此代码有效 当我将它与下面的链接一起使用时 它不会 var player AVPlayer override func
  • 我们如何验证推送的提交消息?

    来自 CVS 的政策是 提交消息应标有错误编号 简单后缀 9999 CVS 脚本在提交期间对此进行检查 如果消息不符合则拒绝提交 git hook commit msg 在开发人员方面执行此操作 但我们发现自动系统检查并提醒我们这一点很有帮
  • 如何在c#中打印文本框的行号

    这将是一篇很长的文章 如果对我正在遵循的程序有任何建议 我想提出建议 我想要最好的方法来打印 Richtextbox 中每个 CRLF 终止行旁边的行号 我正在使用 C 和 NET 我尝试过使用 ListView 但当行数增加时效率很低 我