From d1d7a6dcbd4bd0d689d0d379d2d887d01b0beacb Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 09 十二月 2025 16:21:07 +0800
Subject: [PATCH] 0312 优化字符串拼接函数

---
 Assets/Editor/Tool/BytesVersionMaker.cs          |    6 
 Assets/Editor/Tool/ClientPackage_Standalone.cs   |    4 
 Assets/Editor/Tool/UpdateSpritePackingSetting.cs |   32 +++---
 Assets/Launch/Common/FileExtersion.cs            |    4 
 Assets/Editor/Tool/ClientPackage.cs              |   10 +-
 Assets/Launch/UI/LaunchWins/LaunchExWin.cs       |    6 
 Assets/Editor/Tool/AssetsVersionCmpMaker.cs      |    2 
 Assets/Editor/Tool/AssetsVersionMaker.cs         |    6 
 Assets/Launch/Utility/StringUtility.cs           |   83 ++++++++++++----
 Assets/Editor/Tool/AssetBundleBuildExtersion.cs  |   10 +-
 Assets/Editor/Tool/SpriteManageTool.cs           |    8 
 Assets/Editor/ConfigGen/ConfigClassGenerate.cs   |   90 +++++++++---------
 12 files changed, 152 insertions(+), 109 deletions(-)

diff --git a/Assets/Editor/ConfigGen/ConfigClassGenerate.cs b/Assets/Editor/ConfigGen/ConfigClassGenerate.cs
index efd5e6f..25f551a 100644
--- a/Assets/Editor/ConfigGen/ConfigClassGenerate.cs
+++ b/Assets/Editor/ConfigGen/ConfigClassGenerate.cs
@@ -351,132 +351,132 @@
         field = field.Replace(" ", "");
         if (type.Contains("Dictionary<int, int[][]>"))
         {
-            return StringUtility.Contact(field, " = ConfigParse.ParseIntArray2Dict(tables", "[", index, "].Replace(\"(\", \"[\").Replace(\")\", \"]\")); ");
+            return StringUtility.Concat(field, " = ConfigParse.ParseIntArray2Dict(tables", "[", index.ToString(), "].Replace(\"(\", \"[\").Replace(\")\", \"]\")); ");
         }
         else if (type.Contains("int[][]"))
         {
-            return StringUtility.Contact(field, " = JsonMapper.ToObject<int[][]>(tables", "[", index, "].Replace(\"(\", \"[\").Replace(\")\", \"]\")); ");
+            return StringUtility.Concat(field, " = JsonMapper.ToObject<int[][]>(tables", "[", index.ToString(), "].Replace(\"(\", \"[\").Replace(\")\", \"]\")); ");
         }
         else if (type.Contains("Dictionary<int, int>"))
         {
-            return StringUtility.Contact(field, " = ConfigParse.ParseIntDict(tables", "[", index, "]); ");
+            return StringUtility.Concat(field, " = ConfigParse.ParseIntDict(tables", "[", index.ToString(), "]); ");
         }
         else if (type.Contains("Dictionary<int, int[]>"))
         {
-            return StringUtility.Contact(field, " = ConfigParse.ParseIntArrayDict(tables", "[", index, "]); ");
+            return StringUtility.Concat(field, " = ConfigParse.ParseIntArrayDict(tables", "[", index.ToString(), "]); ");
         }
         else if (type.Contains("float[][]"))
         {
-            return StringUtility.Contact(field, " = JsonMapper.ToObject<float[][]>(tables", "[", index, "].Replace(\"(\", \"[\").Replace(\")\", \"]\")); ");
+            return StringUtility.Concat(field, " = JsonMapper.ToObject<float[][]>(tables", "[", index.ToString(), "].Replace(\"(\", \"[\").Replace(\")\", \"]\")); ");
         }
         else if (type.Contains("int[]"))
         {
-            var line0 = StringUtility.Contact("if (tables", "[", index, "].Contains(\"[\"))\n");
+            var line0 = StringUtility.Contact("if (tables", "[", index.ToString(), "].Contains(\"[\"))\n");
             var line0_1 = StringUtility.Contact(retract3, "{\n");
-            var line0_2 = StringUtility.Contact(retract4, field, " = JsonMapper.ToObject<int[]>(tables", "[", index, "]);\n");
+            var line0_2 = StringUtility.Concat(retract4, field, " = JsonMapper.ToObject<int[]>(tables", "[", index.ToString(), "]);\n");
             var line0_3 = StringUtility.Contact(retract3, "}\n");
             var line0_4 = StringUtility.Contact(retract3, "else\n");
             var line0_5 = StringUtility.Contact(retract3, "{\n");
-            var line1 = StringUtility.Contact(retract4, "string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
-            var line2 = StringUtility.Contact(retract4, field, " = ", "new int", "[", field, "StringArray.Length]", ";", "\n");
-            var line3 = StringUtility.Contact(retract4, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
+            var line1 = StringUtility.Concat(retract4, "string[] ", field, "StringArray", " = ", "tables", "[", index.ToString(), "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
+            var line2 = StringUtility.Concat(retract4, field, " = ", "new int", "[", field, "StringArray.Length]", ";", "\n");
+            var line3 = StringUtility.Concat(retract4, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
             var line4 = StringUtility.Contact(retract4, "{\n");
-            var line5 = StringUtility.Contact(retract5, " int.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n");
+            var line5 = StringUtility.Concat(retract5, " int.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n");
             var line6 = StringUtility.Contact(retract4, "}\n");
             var line0_6 = StringUtility.Contact(retract3, "}");
 
-            return StringUtility.Contact(line0, line0_1, line0_2, line0_3, line0_4, line0_5, line1, line2, line3, line4, line5, line6, line0_6);
+            return StringUtility.Concat(line0, line0_1, line0_2, line0_3, line0_4, line0_5, line1, line2, line3, line4, line5, line6, line0_6);
         }
         else if (type.Contains("Int2[]"))
         {
-            var line1 = StringUtility.Contact("string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
-            var line2 = StringUtility.Contact(retract3, field, " = ", "new Int2", "[", field, "StringArray.Length]", ";", "\n");
-            var line3 = StringUtility.Contact(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
+            var line1 = StringUtility.Concat("string[] ", field, "StringArray", " = ", "tables", "[", index.ToString(), "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
+            var line2 = StringUtility.Concat(retract3, field, " = ", "new Int2", "[", field, "StringArray.Length]", ";", "\n");
+            var line3 = StringUtility.Concat(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
             var line4 = StringUtility.Contact(retract3, "{\n");
-            var line5 = StringUtility.Contact(retract4, " Int2.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n");
+            var line5 = StringUtility.Concat(retract4, " Int2.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n");
             var line6 = StringUtility.Contact(retract3, "}");
 
-            return StringUtility.Contact(line1, line2, line3, line4, line5, line6);
+            return StringUtility.Concat(line1, line2, line3, line4, line5, line6);
         }
         else if (type.Contains("Int3[]"))
         {
-            var line1 = StringUtility.Contact("string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
-            var line2 = StringUtility.Contact(retract3, field, " = ", "new Int3", "[", field, "StringArray.Length]", ";", "\n");
-            var line3 = StringUtility.Contact(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
+            var line1 = StringUtility.Concat("string[] ", field, "StringArray", " = ", "tables", "[", index.ToString(), "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
+            var line2 = StringUtility.Concat(retract3, field, " = ", "new Int3", "[", field, "StringArray.Length]", ";", "\n");
+            var line3 = StringUtility.Concat(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
             var line4 = StringUtility.Contact(retract3, "{\n");
-            var line5 = StringUtility.Contact(retract4, " Int3.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n");
+            var line5 = StringUtility.Concat(retract4, " Int3.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n");
             var line6 = StringUtility.Contact(retract3, "}");
 
-            return StringUtility.Contact(line1, line2, line3, line4, line5, line6);
+            return StringUtility.Concat(line1, line2, line3, line4, line5, line6);
         }
         else if (type.Contains("float[]"))
         {
-            var line0 = StringUtility.Contact("if (tables", "[", index, "].Contains(\"[\"))\n");
+            var line0 = StringUtility.Contact("if (tables", "[", index.ToString(), "].Contains(\"[\"))\n");
             var line0_1 = StringUtility.Contact(retract3, "{\n");
-            var line0_2 = StringUtility.Contact(retract4, field, " = JsonMapper.ToObject<float[]>(tables", "[", index, "]);\n");
+            var line0_2 = StringUtility.Concat(retract4, field, " = JsonMapper.ToObject<float[]>(tables", "[", index.ToString(), "]);\n");
             var line0_3 = StringUtility.Contact(retract3, "}\n");
             var line0_4 = StringUtility.Contact(retract3, "else\n");
             var line0_5 = StringUtility.Contact(retract3, "{\n");
-            var line1 = StringUtility.Contact(retract4, "string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
-            var line2 = StringUtility.Contact(retract4, field, " = ", "new float", "[", field, "StringArray.Length", "]", ";", "\n");
-            var line3 = StringUtility.Contact(retract4, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
+            var line1 = StringUtility.Concat(retract4, "string[] ", field, "StringArray", " = ", "tables", "[", index.ToString(), "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
+            var line2 = StringUtility.Concat(retract4, field, " = ", "new float", "[", field, "StringArray.Length", "]", ";", "\n");
+            var line3 = StringUtility.Concat(retract4, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
             var line4 = StringUtility.Contact(retract4, "{\n");
-            var line5 = StringUtility.Contact(retract5, " float.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n");
+            var line5 = StringUtility.Concat(retract5, " float.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n");
             var line6 = StringUtility.Contact(retract4, "}\n");
             var line0_6 = StringUtility.Contact(retract3, "}");
 
-            return StringUtility.Contact(line0, line0_1, line0_2, line0_3, line0_4, line0_5, line1, line2, line3, line4, line5, line6, line0_6);
+            return StringUtility.Concat(line0, line0_1, line0_2, line0_3, line0_4, line0_5, line1, line2, line3, line4, line5, line6, line0_6);
         }
         else if (type.Contains("string[]"))
         {
-            var line1 = StringUtility.Contact(field, " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);");
+            var line1 = StringUtility.Concat(field, " = ", "tables", "[", index.ToString(), "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);");
             return line1;
         }
         else if (type.Contains("Vector3[]"))
         {
-            var line1 = StringUtility.Contact("string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
-            var line2 = StringUtility.Contact(retract3, field, " = ", "new Vector3", "[", field, "StringArray.Length", "]", ";", "\n");
-            var line3 = StringUtility.Contact(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
+            var line1 = StringUtility.Concat("string[] ", field, "StringArray", " = ", "tables", "[", index.ToString(), "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
+            var line2 = StringUtility.Concat(retract3, field, " = ", "new Vector3", "[", field, "StringArray.Length", "]", ";", "\n");
+            var line3 = StringUtility.Concat(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
             var line4 = StringUtility.Contact(retract3, "{\n");
-            var line5 = StringUtility.Contact(retract4, field, "[i]", "=", field, "StringArray", "[i]", ".Vector3Parse()", ";", "\n");
+            var line5 = StringUtility.Concat(retract4, field, "[i]", "=", field, "StringArray", "[i]", ".Vector3Parse()", ";", "\n");
             var line6 = StringUtility.Contact(retract3, "}");
 
-            return StringUtility.Contact(line1, line2, line3, line4, line5, line6);
+            return StringUtility.Concat(line1, line2, line3, line4, line5, line6);
         }
         else if (type.Contains("int"))
         {
-            return StringUtility.Contact("int.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
+            return StringUtility.Concat("int.TryParse(tables", "[", index.ToString(), "]", ",", "out ", field, ")", "; ");
         }
         else if (type.Contains("long"))
         {
-            return StringUtility.Contact("long.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
+            return StringUtility.Concat("long.TryParse(tables", "[", index.ToString(), "]", ",", "out ", field, ")", "; ");
         }
         else if (type.Contains("float"))
         {
-            return StringUtility.Contact("float.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
+            return StringUtility.Concat("float.TryParse(tables", "[", index.ToString(), "]", ",", "out ", field, ")", "; ");
         }
         else if (type.Contains("string"))
         {
-            return StringUtility.Contact(field, " = ", "tables", "[", index, "]", ";");
+            return StringUtility.Concat(field, " = ", "tables", "[", index.ToString(), "]", ";");
         }
         else if (type.Contains("Vector3"))
         {
-            return StringUtility.Contact(field, "=", "tables", "[", index, "]", ".Vector3Parse()", ";");
+            return StringUtility.Concat(field, "=", "tables", "[", index.ToString(), "]", ".Vector3Parse()", ";");
         }
         else if (type.Contains("bool"))
         {
-            var line1 = StringUtility.Contact("var ", field, "Temp", " = 0", ";", "\n");
-            var line2 = StringUtility.Contact(retract3, "int.TryParse(tables", "[", index, "]", ",", "out ", field, "Temp", ")", "; ", "\n");
-            var line3 = StringUtility.Contact(retract3, field, "=", field, "Temp", "!=0", ";");
+            var line1 = StringUtility.Concat("var ", field, "Temp", " = 0", ";", "\n");
+            var line2 = StringUtility.Concat(retract3, "int.TryParse(tables", "[", index.ToString(), "]", ",", "out ", field, "Temp", ")", "; ", "\n");
+            var line3 = StringUtility.Concat(retract3, field, "=", field, "Temp", "!=0", ";");
             return StringUtility.Contact(line1, line2, line3);
         }
         else if (type.Contains("Int2"))
         {
-            return StringUtility.Contact("Int2.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
+            return StringUtility.Concat("Int2.TryParse(tables", "[", index.ToString(), "]", ",", "out ", field, ")", "; ");
         }
         else if (type.Contains("Int3"))
         {
-            return StringUtility.Contact("Int3.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
+            return StringUtility.Concat("Int3.TryParse(tables", "[", index.ToString(), "]", ",", "out ", field, ")", "; ");
         }
         else
         {
diff --git a/Assets/Editor/Tool/AssetBundleBuildExtersion.cs b/Assets/Editor/Tool/AssetBundleBuildExtersion.cs
index d3919a1..7dc8aab 100644
--- a/Assets/Editor/Tool/AssetBundleBuildExtersion.cs
+++ b/Assets/Editor/Tool/AssetBundleBuildExtersion.cs
@@ -47,11 +47,11 @@
             assets.Add(assetBundleBuild);
         }
 
-        var rootPath = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, category);
-        var mainFile = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, GetMainFestFileName(buildTarget));//鏀瑰悕瀛楀墠
-        var mainFileRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, AssetVersionUtility.EncodeFileName(category), "_assetbundle");//鏀瑰悕瀛楀悗
-        var manifest = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, GetMainFestFileName(buildTarget), ".manifest");
-        var manifestRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, AssetVersionUtility.EncodeFileName(category), "_assetbundle.manifest");
+        var rootPath = StringUtility.Contact(output, Path.AltDirectorySeparatorChar.ToString(), category);
+        var mainFile = StringUtility.Contact(output, Path.AltDirectorySeparatorChar.ToString(), GetMainFestFileName(buildTarget));//鏀瑰悕瀛楀墠
+        var mainFileRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar.ToString(), AssetVersionUtility.EncodeFileName(category), "_assetbundle");//鏀瑰悕瀛楀悗
+        var manifest = StringUtility.Contact(output, Path.AltDirectorySeparatorChar.ToString(), GetMainFestFileName(buildTarget), ".manifest");
+        var manifestRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar.ToString(), AssetVersionUtility.EncodeFileName(category), "_assetbundle.manifest");
 
         if (rebuild && Directory.Exists(rootPath))
             Directory.Delete(rootPath, true);
diff --git a/Assets/Editor/Tool/AssetsVersionCmpMaker.cs b/Assets/Editor/Tool/AssetsVersionCmpMaker.cs
index 8fd0e3f..609efaa 100644
--- a/Assets/Editor/Tool/AssetsVersionCmpMaker.cs
+++ b/Assets/Editor/Tool/AssetsVersionCmpMaker.cs
@@ -48,7 +48,7 @@
             fileSize = fileInfo.Length;
             md5 = FileExtersion.GetMD5HashFromFile(fileInfo.FullName);
 
-            lines.Add(StringUtility.Contact(relativePath, "\t", extersion, "\t", fileSize, "\t", md5));
+            lines.Add(StringUtility.Concat(relativePath, "\t", extersion, "\t", fileSize.ToString(), "\t", md5));
         }
 
         var assetVersionFile = StringUtility.Contact(Application.dataPath, "/Resources/AssetsVersionCmp.txt");
diff --git a/Assets/Editor/Tool/AssetsVersionMaker.cs b/Assets/Editor/Tool/AssetsVersionMaker.cs
index 4f476ff..ecbb1e8 100644
--- a/Assets/Editor/Tool/AssetsVersionMaker.cs
+++ b/Assets/Editor/Tool/AssetsVersionMaker.cs
@@ -39,16 +39,16 @@
             fileSize = fileInfo.Length;
             md5 = FileExtersion.GetMD5HashFromFile(fileInfo.FullName);
 
-            lines.Add(StringUtility.Contact(relativePath, "\t", extersion, "\t", fileSize, "\t", md5));
+            lines.Add(StringUtility.Concat(relativePath, "\t", extersion, "\t", fileSize.ToString(), "\t", md5));
         }
 
-        var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar, "AssetsVersion.txt");
+        var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar.ToString(), "AssetsVersion.txt");
         if (File.Exists(assetVersionFile))
         {
             File.Delete(assetVersionFile);
         }
 
-        File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar, "AssetsVersion.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
+        File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar.ToString(), "AssetsVersion.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
     }
 
 }
diff --git a/Assets/Editor/Tool/BytesVersionMaker.cs b/Assets/Editor/Tool/BytesVersionMaker.cs
index 2fdc1bf..e11c980 100644
--- a/Assets/Editor/Tool/BytesVersionMaker.cs
+++ b/Assets/Editor/Tool/BytesVersionMaker.cs
@@ -31,16 +31,16 @@
             fileSize = fileInfo.Length;
             md5 = FileExtersion.GetMD5HashFromFile(fileInfo.FullName);
 
-            lines.Add(StringUtility.Contact(relativePath, "\t", extersion, "\t", fileSize, "\t", md5));
+            lines.Add(StringUtility.Concat(relativePath, "\t", extersion, "\t", fileSize.ToString(), "\t", md5));
         }
 
-        var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar, "logicbytes.txt");
+        var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar.ToString(), "logicbytes.txt");
         if (File.Exists(assetVersionFile))
         {
             File.Delete(assetVersionFile);
         }
 
-        File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar, "logicbytes.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
+        File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar.ToString(), "logicbytes.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
     }
 
 }
diff --git a/Assets/Editor/Tool/ClientPackage.cs b/Assets/Editor/Tool/ClientPackage.cs
index 559d1b4..9897f71 100644
--- a/Assets/Editor/Tool/ClientPackage.cs
+++ b/Assets/Editor/Tool/ClientPackage.cs
@@ -397,7 +397,7 @@
     public static void BuildApk(string _sdkPath, string _output, string _publisher, int _buildIndex, bool _development)
     {
         PreBuild(_publisher, _buildIndex);
-        var auditTimeFile = StringUtility.Contact(Application.dataPath, Path.DirectorySeparatorChar, "Resources/Config/AuditTime.txt");
+        var auditTimeFile = StringUtility.Contact(Application.dataPath, Path.DirectorySeparatorChar.ToString(), "Resources/Config/AuditTime.txt");
         if (File.Exists(auditTimeFile))
         {
             File.Delete(auditTimeFile);
@@ -485,7 +485,7 @@
         string channelSdkPath;
         string copySdkFile;
 
-        channelSdkPath = StringUtility.Contact(_sdkPath, "/Channel/Android/", versionConfig.sdkFileName, "/", variant);
+        channelSdkPath = StringUtility.Concat(_sdkPath, "/Channel/Android/", versionConfig.sdkFileName, "/", variant);
         copySdkFile = StringUtility.Contact(_sdkPath, "/Channel/Android/", versionConfig.sdkFileName, "/AndroidManifest.xml");
         File.Copy(copySdkFile, MANIFEST_PATH);
         copySdkFile = StringUtility.Contact(_sdkPath, "/Channel/Android/", versionConfig.sdkFileName, "/baseProjectTemplate.gradle");
@@ -539,7 +539,7 @@
 
         if (_development)
         {
-            var apkName = StringUtility.Contact(_output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", _buildIndex, "_development.apk");
+            var apkName = StringUtility.Concat(_output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", _buildIndex.ToString(), "_development.apk");
             BuildPipeline.BuildPlayer(baseLevels, apkName, BuildTarget.Android, BuildOptions.Development | BuildOptions.ConnectWithProfiler | BuildOptions.AllowDebugging);
         }
         else
@@ -548,12 +548,12 @@
             if (EditorUserBuildSettings.buildAppBundle)
             {
                 Debug.Log("鍕鹃�変簡 Build App Bundle (Google Play) 鎵撳寘aab");
-                apkName = StringUtility.Contact(_output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", _buildIndex, ".aab");
+                apkName = StringUtility.Concat(_output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", _buildIndex.ToString(), ".aab");
             }
             else
             {
                 Debug.Log("娌℃湁鍕鹃�� Build App Bundle (Google Play) 鎵撳寘apk");
-                apkName = StringUtility.Contact(_output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", _buildIndex, ".apk");
+                apkName = StringUtility.Concat(_output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", _buildIndex.ToString(), ".apk");
             }
             BuildPipeline.BuildPlayer(baseLevels, apkName, BuildTarget.Android, BuildOptions.None);
         }
diff --git a/Assets/Editor/Tool/ClientPackage_Standalone.cs b/Assets/Editor/Tool/ClientPackage_Standalone.cs
index 83cde12..9b47154 100644
--- a/Assets/Editor/Tool/ClientPackage_Standalone.cs
+++ b/Assets/Editor/Tool/ClientPackage_Standalone.cs
@@ -333,12 +333,12 @@
 
         if (development)
         {
-            var name = StringUtility.Contact(output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", buildIndex, "_development.exe");
+            var name = StringUtility.Concat(output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", buildIndex.ToString(), "_development.exe");
             BuildPipeline.BuildPlayer(baseLevels, name, BuildTarget.StandaloneWindows, BuildOptions.Development | BuildOptions.ConnectWithProfiler | BuildOptions.AllowDebugging);
         }
         else
         {
-            var name = StringUtility.Contact(output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", buildIndex, ".exe");
+            var name = StringUtility.Concat(output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", buildIndex.ToString(), ".exe");
             BuildPipeline.BuildPlayer(baseLevels, name, BuildTarget.StandaloneWindows, BuildOptions.None);
         }
     }
diff --git a/Assets/Editor/Tool/SpriteManageTool.cs b/Assets/Editor/Tool/SpriteManageTool.cs
index 525e838..3d5832d 100644
--- a/Assets/Editor/Tool/SpriteManageTool.cs
+++ b/Assets/Editor/Tool/SpriteManageTool.cs
@@ -245,7 +245,7 @@
                     var _detail = _list[i];
                     var _fatherDetail = _detail.fatherDetail;
                     GUILayout.BeginHorizontal();
-                    GUILayout.Label(StringUtility.Contact(i + 1, ".", "Path: "));
+                    GUILayout.Label(StringUtility.Contact((i + 1).ToString(), ".", "Path: "));
                     var _path = StringUtility.Contact(_detail.fatherDetail, _fatherDetail == string.Empty ? string.Empty : "/", _detail.name);
                     GUILayout.TextField(_path);
                     if (_fatherDetail != string.Empty && GUILayout.Button("Goto"))
@@ -288,7 +288,7 @@
             }
             GUILayout.BeginHorizontal();
             var _fatherDetail = _detail.fatherDetail;
-            GUILayout.Label(StringUtility.Contact(i + 1, ".", "Path: "));
+            GUILayout.Label(StringUtility.Contact((i + 1).ToString(), ".", "Path: "));
             var _path = StringUtility.Contact(_detail.fatherDetail, _fatherDetail == string.Empty ? string.Empty : "/", _detail.name);
             GUILayout.TextField(_path);
             if (_fatherDetail != string.Empty && GUILayout.Button("Goto"))
@@ -425,7 +425,7 @@
                 var _match = _matchs[_index - 1];
                 GetRefComponent(_list[_index], _list[_index].Split('\n'), _match.Groups[1].Value);
                 bool isCancel = EditorUtility.DisplayCancelableProgressBar("鏌ユ壘寮曠敤璧勬簮",
-                    StringUtility.Contact(_index, "/", _list.Count), (float)_index / (float)_list.Count);
+                    StringUtility.Contact(_index.ToString(), "/", _list.Count.ToString()), (float)_index / (float)_list.Count);
                 _index++;
                 if (isCancel || _index >= _list.Count)
                 {
@@ -447,7 +447,7 @@
                             _details.Add(_detail);
                         }
                         isCancel = EditorUtility.DisplayCancelableProgressBar("鏌ユ壘寮曠敤璧勬簮",
-                            StringUtility.Contact(_index, "/", _keys.Count), (float)_index / (float)_keys.Count);
+                            StringUtility.Contact(_index.ToString(), "/", _keys.Count.ToString()), (float)_index / (float)_keys.Count);
                         _index++;
                         if (isCancel || _index >= _keys.Count)
                         {
diff --git a/Assets/Editor/Tool/UpdateSpritePackingSetting.cs b/Assets/Editor/Tool/UpdateSpritePackingSetting.cs
index 2ec3e79..0cc3ee4 100644
--- a/Assets/Editor/Tool/UpdateSpritePackingSetting.cs
+++ b/Assets/Editor/Tool/UpdateSpritePackingSetting.cs
@@ -1,19 +1,19 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEditor;
-using System.IO;
-using System;
-using UnityEditor.U2D;
-using UnityEngine.U2D;
-
-
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using System.IO;
+using System;
+using UnityEditor.U2D;
+using UnityEngine.U2D;
+
+
 public class UpdateSpritePackingSetting
-{
-    static string rootPath = Application.dataPath + "/ResourcesOut/Sprite";
+{
+    static string rootPath = Application.dataPath + "/ResourcesOut/Sprite";
     static string spriteRelativePath = "Assets/ResourcesOut/Sprite";
 
-    [MenuItem("绋嬪簭/Sprite/鏍囧噯鍖朣prite璁剧疆")]
+    [MenuItem("绋嬪簭/Sprite/鏍囧噯鍖朣prite璁剧疆")]
     public static void UpdateAllSpritePackingSetting()
     {
         var path = "Assets/Editor/SpritePacking/SpriteSettings.asset";
@@ -26,7 +26,7 @@
 
         foreach (var setting in so.spriteSettings)
         {
-            var directoryPath = StringUtility.Contact(rootPath, Path.DirectorySeparatorChar, setting.folderName);
+            var directoryPath = StringUtility.Contact(rootPath, Path.DirectorySeparatorChar.ToString(), setting.folderName);
 
             if (!Directory.Exists(directoryPath))
             {
@@ -164,7 +164,7 @@
         int index = 0;
         foreach (SpriteSettingConfig.SpriteSetting setting in so.spriteSettings)
         {
-            var directoryPath = StringUtility.Contact(rootPath, Path.DirectorySeparatorChar, setting.folderName);
+            var directoryPath = StringUtility.Contact(rootPath, Path.DirectorySeparatorChar.ToString(), setting.folderName);
 
             if (!Directory.Exists(directoryPath))
             {
@@ -275,7 +275,7 @@
         AssetDatabase.Refresh();
     }
 
-    
+    
 
     /// <summary>
     /// 姣忎釜鍥鹃泦鐨勬墍鏈夊浘鐗囪矾寰�  --  璁板緱鐢ㄤ箣鍓嶆竻绌�
diff --git a/Assets/Launch/Common/FileExtersion.cs b/Assets/Launch/Common/FileExtersion.cs
index aa78bb5..0604e01 100644
--- a/Assets/Launch/Common/FileExtersion.cs
+++ b/Assets/Launch/Common/FileExtersion.cs
@@ -105,7 +105,7 @@
         {
             var startIndex = index + 9;
             fileName = fileName.Substring(startIndex, fileName.Length - startIndex);
-            return StringUtility.Contact(Path.GetDirectoryName(_fullName), Path.DirectorySeparatorChar, fileName);
+            return StringUtility.Contact(Path.GetDirectoryName(_fullName), Path.DirectorySeparatorChar.ToString(), fileName);
         }
         else
         {
@@ -123,7 +123,7 @@
             fileName = fileName.Substring(0, index);
         }
 
-        return StringUtility.Contact(Path.GetDirectoryName(_fullName), Path.DirectorySeparatorChar, _version, "_version_", fileName);
+        return StringUtility.Concat(Path.GetDirectoryName(_fullName), Path.DirectorySeparatorChar.ToString(), _version.ToString(), "_version_", fileName);
     }
 
     public static void DirectoryCopy(string _from, string _to)
diff --git a/Assets/Launch/UI/LaunchWins/LaunchExWin.cs b/Assets/Launch/UI/LaunchWins/LaunchExWin.cs
index 86c679a..ebb557b 100644
--- a/Assets/Launch/UI/LaunchWins/LaunchExWin.cs
+++ b/Assets/Launch/UI/LaunchWins/LaunchExWin.cs
@@ -67,7 +67,7 @@
             m_IosProgressContainer.gameObject.SetActive(false);
 
             //鎵撳寘鐗堟湰 + 鍔熻兘鐗堟湰 + 璇█ID
-            m_Version.text = StringUtility.Contact(VersionConfigEx.Get().version, "_", VersionConfigEx.Get().buildIndex,
+            m_Version.text = StringUtility.Concat(VersionConfigEx.Get().version, "_", VersionConfigEx.Get().buildIndex.ToString(),
                 "_", InitialFunctionConfig.Get("version").Numerical1, " ", LocalResManager.Id);
         }
 
@@ -117,13 +117,13 @@
         }
         if (ShowCircleView)
         {
-            m_IosProgressTip.text = StringUtility.Contact(sliderText, " ", (int)(value * 100), "%");
+            m_IosProgressTip.text = StringUtility.Contact(sliderText, " ", ((int)(value * 100)).ToString(), "%");
             //circleImg.Rotate(Vector3.forward, -1800 * Time.deltaTime);
         }
         else
         {
             m_TotalProgressSlider.value = value;
-            m_StageDescription.text = StringUtility.Contact(sliderText, " ", (int)(value * 100), "%");
+            m_StageDescription.text = StringUtility.Contact(sliderText, " ", ((int)(value * 100)).ToString(), "%");
         }
 
     }
diff --git a/Assets/Launch/Utility/StringUtility.cs b/Assets/Launch/Utility/StringUtility.cs
index f28fc97..72bd249 100644
--- a/Assets/Launch/Utility/StringUtility.cs
+++ b/Assets/Launch/Utility/StringUtility.cs
@@ -1,46 +1,89 @@
-锘縰sing UnityEngine;
+using UnityEngine;
 using System.Collections;
 using System.Text;
+using System;
 
 public class StringUtility
 {
-    public static string[] splitSeparator = new string[] { "|" };
+    public static readonly string[] splitSeparator = new string[] { "|" };
 
-    private static StringBuilder s_CacheStringBuilder = new StringBuilder();
 
-    static object lockObject = new object();
-
-    public static string Contact(params object[] _objects)
+    // 鏂板锛氫负寰幆璋冪敤鐨勪紭鍖栫増鏈紙澶嶇敤StringBuilder锛�
+    [ThreadStatic]
+    private static StringBuilder _threadLocalStringBuilder;
+    
+    /// <summary>
+    /// 鑾峰彇褰撳墠绾跨▼鐨凷tringBuilder
+    /// </summary>
+    private static StringBuilder GetThreadLocalStringBuilder()
     {
-        lock (lockObject)
+        if (_threadLocalStringBuilder == null)
         {
-            s_CacheStringBuilder.Remove(0, s_CacheStringBuilder.Length);
-            for (int i = 0; i < _objects.Length; ++i)
-            {
-                if (_objects[i] != null)
-                {
-                    s_CacheStringBuilder.Append(_objects[i]);
-                }
-            }
-            return s_CacheStringBuilder.ToString();
+            _threadLocalStringBuilder = new StringBuilder();
         }
+        return _threadLocalStringBuilder;
     }
+
+    /// <summary>
+    /// 鏅鸿兘瀛楃涓叉嫾鎺ユ柟娉曪紝鑷姩閫夋嫨鏈�浼樼瓥鐣�
+    /// - 2-4涓瓧绗︿覆锛氱洿鎺ヤ娇鐢� string.Concat() (鏈�楂樻�ц兘)
+    /// - 5涓互涓婂瓧绗︿覆锛氫娇鐢ㄧ嚎绋嬫湰鍦� StringBuilder 澶嶇敤 (寰幆浼樺寲)
+    /// </summary>
+    public static string Concat(params string[] _objects)
+    {
+        // 灏戦噺瀛楃涓茬洿鎺ヤ娇鐢–oncat锛屾�ц兘鏈�浣�
+        if (_objects.Length <= 4)
+        {
+            return string.Concat(_objects);
+        }
+
+        // 澶ч噺瀛楃涓蹭娇鐢ㄧ嚎绋嬫湰鍦癝tringBuilder锛岄伩鍏嶉噸澶嶅垱寤�
+        var sb = GetThreadLocalStringBuilder();
+        sb.Clear();
+        foreach (string str in _objects)
+        {
+            sb.Append(str);
+        }
+        return sb.ToString();
+    }
+    
+    // AI鎻愰啋瀹為檯鍦ㄧ幇浠g紪杈戝櫒涓紝浣庝簬4涓瓧绗︿覆鐨�+ 鎿嶄綔绗︾殑鎬ц兘鍜� string.Concat 鍑犱箮鐩稿悓锛屼細琚櫤鑳戒紭鍖栦负 string.Concat
+    // 娣诲姞甯哥敤2涓瓧绗︿覆鎷兼帴鐨勪紭鍖栫増鏈�
+    public static string Contact(string str1, string str2)
+    {
+        return string.Concat(str1, str2);
+    }
+    
+    // 娣诲姞甯哥敤3涓瓧绗︿覆鎷兼帴鐨勪紭鍖栫増鏈�
+    public static string Contact(string str1, string str2, string str3)
+    {
+        return string.Concat(str1, str2, str3);
+    }
+    
+    // 娣诲姞甯哥敤4涓瓧绗︿覆鎷兼帴鐨勪紭鍖栫増鏈�
+    public static string Contact(string str1, string str2, string str3, string str4)
+    {
+        return string.Concat(str1, str2, str3, str4);
+    }
+   
+
+  
 
 
     public static string FormatSpeed(float speed)
     {
         if (speed > 1048576f)
         {
-            return StringUtility.Contact((speed / 1048576f).ToString("f1"), " M/S");
+            return Contact((speed / 1048576f).ToString("f1"), " M/S");
         }
         else if (speed > 1024f)
         {
-            return StringUtility.Contact((speed / 1024f).ToString("f1"), " KB/S");
+            return Contact((speed / 1024f).ToString("f1"), " KB/S");
         }
         else
         {
-            return StringUtility.Contact(speed.ToString("f1"), " B/S");
-        };
+            return Contact(speed.ToString("f1"), " B/S");
+        }
     }
 
 }

--
Gitblit v1.8.0