如何在不创建临时字符串的情况下将字符串的一部分转换为int / float / vector3等?

feilian118

在C#中,我有一个像这样的字符串:“ 1 3.14(23,23.2,43,88)8.27”我需要根据int / float / vector3这样的值将此字符串转换为其他类型,现在我有一些类似的代码这:

public static int ReadInt(this string s, ref string op)
{
    s = s.Trim();
    string ss = "";
    int idx = s.IndexOf(" ");
    if (idx > 0)
    {
        ss = s.Substring(0, idx);
        op = s.Substring(idx);
    }
    else
    {
        ss = s;
        op = "";
    }
    return Convert.ToInt32(ss);
}

这将读取第一个int值,我有一些类似的函数来读取float vector3等。但是问题是:在我的应用程序中,我必须做很多事情,因为我从某个插件收到了字符串,所以我需要这样做每帧,所以我创建了很多字符串,这导致了很多GC都会影响性能,这是我可以在不创建临时字符串的情况下完成类似工作的一种方法吗?

彼得·杜尼奥(Peter Duniho)

第0代对象(如在此创建的对象)可能不会对性能产生太大影响,因为它们收集起来相对便宜。在开始担心额外字符串的GC开销之前,我将从使用不变文化转变为使用不变文化Convert进行调用int.Parse()

另外,您实际上不需要创建新的字符串即可完成该Trim()行为。毕竟,无论如何,您都在扫描和索引字符串。还是做你的初始扫描为空白,然后之间的空间分隔ssop,让你得到你需要的字符串。现在,您创建的字符串实例比实际需要多50%。

所有这些都说明了,不...基本的.NET框架中没有任何内容可以解析子字符串,而无需实际创建新的字符串实例。您必须编写自己的解析例程才能完成该任务。

您应该首先评估实际对实际性能的影响,以确保这些子字符串确实是一个重要问题。

我不知道“某些插件”是什么,或者您必须如何处理它的输入,但是对于这种情况,获取原始输入字符串的开销淹没了这种开销,我不会感到惊讶。用于解析的子字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章