You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#生成手机号性能优化求助:批量生成手机号速度过慢如何解决?

提升手机号生成与DataGridView加载性能的方案

先帮你梳理下当前代码里拖慢性能的核心问题,再给你针对性的优化方案:

1. 删掉完全多余的外层循环

你代码里的do-while循环完全没必要,而且如果number一开始就等于textBox2的数值,会直接陷入无限死循环——这不仅拖慢性能,还会让程序直接卡死。直接把这个外层循环删掉就好。

2. 避免重复解析字符串

你在循环条件里反复调用Convert.ToInt64(textBox2.Text),每次循环都要把字符串转成数字,这是毫无意义的性能浪费。应该提前把textBox1和textBox2的数值解析好,存在变量里复用。

3. 批量添加行,减少UI刷新(最关键的优化点)

直接在循环里调用dataGridView1.Rows.Add()是性能杀手——每加一行,DataGridView都会触发一次UI重绘,几千几万次下来,界面会巨卡。正确的做法是先把所有要生成的手机号存在一个集合里,然后一次性批量导入到DataGridView,这样只触发一次UI刷新。

优化后的完整代码

// 提前解析数值,避免重复转换,同时做合法性校验
if (!long.TryParse(textBox1.Text, out long startNumber) || !long.TryParse(textBox2.Text, out long endNumber))
{
    MessageBox.Show("请输入有效的数字!");
    return;
}

string prefix = textBox3.Text;
// 用List先缓存所有要生成的手机号
List<string> phoneNumbers = new List<string>();

// 循环生成所有号码,改成<=后就不用额外添加最后一行了
for (long i = startNumber; i <= endNumber; i++)
{
    phoneNumbers.Add(prefix + i);
}

// 批量添加到DataGridView,先暂停布局避免频繁刷新
dataGridView1.SuspendLayout();
dataGridView1.Rows.Clear(); // 如果需要清空原有内容的话

foreach (string number in phoneNumbers)
{
    dataGridView1.Rows.Add(number);
}
// 更高效的方式:直接绑定数据源(推荐)
// dataGridView1.DataSource = phoneNumbers.Select(n => new { 手机号 = n }).ToList();

dataGridView1.ResumeLayout();

额外进阶优化(针对超大量数据)

如果要生成几十万甚至上百万条手机号,可以考虑:

  • 用async/await把生成逻辑放到后台线程,避免UI全程卡死
  • 开启DataGridView的虚拟模式(Virtual Mode),只加载当前可见区域的行,大幅降低内存占用和加载时间

内容的提问来源于stack exchange,提问作者ilyas zahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:56:24