当我在每一帧中多次使用正则表达式时,FPS 下降了



我正在创建一个游戏。

我编写了一个代码,用于检查字符串是否与每帧中使用正则表达式的其他指定字符串匹配。

void function update()
{
string data[] = {"root", "body_bone", "body", "arm_left", "arm_right", "arm_right_sword", "body_belt", "face", "hair", "leg_left", "leg_right"};
vector<string> arrayA(data, end(data));
string data2[] = {"03golden/golden_arm_right_sword", "03golden/golden_arm_right", "03golden/golden_leg_left", "03golden/golden_leg_right", "03golden/golden_body", "03golden/golden_belt", "03golden/golden_arm_left", "face_04", "face_03", "face_02", "face_01", "03golden/golden_hair"};
vector<string> arrayB(data2, end(data2));
for (int i = 0; i < arrayA.size(); i++)
{
for (int j = 0; j < arrayB.size(); j++)
{
string s1 = arrayA[i];
string s2 = arrayB[j];
cmatch results;
stringstream ss;
ss << s1 << "$";
regex pattern(ss.str());
if (regex_search(s2.c_str(), results, pattern))
{
// something process
}
}
}
}

我检查数组"arrayA"中的每个字符串是否与数组"arrayB"中每个字符串的后缀匹配。

但上述过程使FPS下降到五分之一。

似乎当我多次检查正则表达式中的长字符串时,FPS 下降了。

我应该如何使用正则表达式?

我应该如何使用正则表达式?

您可能根本不想为此使用正则表达式,简单的字符串rfind已经更快了,甚至可以改进,但是如果不了解您如何运行它,很难说。尝试这样的事情,看看它是否提高了 FPS:

#include <string>
#include <vector>
#include <iostream>
void update()
{
std::vector<std::string> arrayA = { "root", "body_bone", "body", "arm_left", "arm_right", "arm_right_sword", "body_belt", "face", "hair", "leg_left", "leg_right" };
std::vector<std::string> arrayB = { "03golden/golden_arm_right_sword", "03golden/golden_arm_right", "03golden/golden_leg_left", "03golden/golden_leg_right", "03golden/golden_body", "03golden/golden_belt", "03golden/golden_arm_left", "face_04", "face_03", "face_02", "face_01", "03golden/golden_hair" };
size_t pos;
for (auto const &s1 : arrayA)
for (auto const &s2 : arrayB)
if ((pos = s2.rfind(s1)) != std::string::npos && pos == s2.size() - s1.size())
std::cout << s1 << " => " << s2 << "n";
}
int main() 
{
update();
}

https://ideone.com/OG65qT

body => 03golden/golden_body
arm_left => 03golden/golden_arm_left
arm_right => 03golden/golden_arm_right
arm_right_sword => 03golden/golden_arm_right_sword
hair => 03golden/golden_hair
leg_left => 03golden/golden_leg_left
leg_right => 03golden/golden_leg_right

最新更新