我现在的项目有一个场景,需要将string按,分隔,然后转换int[] ,简单的代码如下
string[] Ids = IndexText.Split(',');
int[] r = new int[Ids.Length];
for (var i = 0; i < Ids.Length; i++)
{
r[i] = Int32.Parse(Ids[i]);
}
这段代码在string特别长的时候,显示性能并不是特别好,请问有没有好一点算法来实现这个功能呢?
大概有100万的长度吧,所以肯定快不了,我能想到的优化,是把int[]数组存成Image类型到数据库,下次直接读成Int[]数组,不知道这样子操作能有多少的优化
我试了一下,现在的做法是把字段的内容换成Image类型存在数据库,读出来用BinaryFormatter转成Int[],效率就提高很多了
我觉得这已经很快了。你的字符串里有多少个数字呀?这个场景用在什么地方?也许可以从其他方面考虑优化性能
大概有100万的长度吧,具体场景就比较难说,这个也是一个历史原因。
我能想到的优化,是把int[]数组存成Image类型到数据库,下次直接读成Int[]数组,省去Split和Pase的时间,不知道这样子操作能有多少的优化
我觉得应该将这个string写入文件,然后读取流的时候判断读取到的byte是不是",",是的话将之前的转为数字存起来,不是的话继续读并将结果累加
这样子的算法我估计提高应该不大,现在主要耗时间耗在split和parse这两个函数上面,差不多一半一半左右