C# 我可以使用格式而不是子字符串吗?

C# 我可以使用格式而不是子字符串吗?,c#,string,substring,C#,String,Substring,使用我的C#桌面应用程序上的内存配置文件,我发现字符串没有从内存中释放出来,导致缓慢而渐进的累积 我有以下代码: var ToYYYMMDDHHMMSS = "YYYMMDDHHMMSS"; var toYR = ToYYYMMDDHHMMSS.Substring(0, 4); var toMN = ToYYYMMDDHHMMSS.Substring(4, 2); var toDY =ToYYYMMDDHHMMSS.Substring(6, 2); var toHR = ToYYYMMDDHHM

使用我的C#桌面应用程序上的内存配置文件,我发现字符串没有从内存中释放出来,导致缓慢而渐进的累积

我有以下代码:

var ToYYYMMDDHHMMSS = "YYYMMDDHHMMSS";
var toYR = ToYYYMMDDHHMMSS.Substring(0, 4);
var toMN = ToYYYMMDDHHMMSS.Substring(4, 2);
var toDY =ToYYYMMDDHHMMSS.Substring(6, 2);
var toHR = ToYYYMMDDHHMMSS.Substring(8, 2);
var toMI = ToYYYMMDDHHMMSS.Substring(10, 2);
var motionPath = string.Format("{0}\\Catalogues\\{1}\\{2}\\{3}\\{4}\\{5}\\{6}", Shared.MOTION_DIRECTORY, camIndex, toYR, toMN, toDY, toHR, toMI);
是否有使用子字符串的替代方法?我可以用String.Format来获得我想要的结果吗

铌 我很抱歉我的问题措词不当

var toyyymmddhmmss=“yyymmddhmmss”

我应该加上“YYYYMMDDHHMMSS”是一个总是变化的时间戳
{抱歉)

我猜您的真实代码的值类似于
2015025071945
——因此实际上不是字面的
yyymmddhhmmss
。如果是这样,我会将该值解析为
DateTime
,而不是提取子字符串:

DateTime dateTime = DateTime.ParseExact(text, "yyyyMMddHHmmss",
                                        CultureInfo.InvariantCulture);
var motionPath = string.Format(@"{0}\Catalogues\{1:yyyy\\MM\\dd\\HH\\mm\\ss}",
                               Shared.MOTION_DIRECTORY, dateTime);
请注意,格式字符串本身是一个逐字逐句的字符串文字,因此您不需要转义反斜杠-但是我在
DateTime
的格式字符串中有
\
,因为
DateTime
格式代码将
\
视为转义

另一种方法是将日期的每一部分分别格式化:

var motionPath = string.Format(@"{0}\Catalogues\{1:yyyy}\{1:MM}\{1:dd}\{1:HH}\{1:mm}\{1:ss}",
                               Shared.MOTION_DIRECTORY, dateTime);
或使用路径。组合:

var motionPath = Path.Combine(Shared.MOTION_DIRECTORY,
                              "Catalogues",
                              dateTime.ToString("yyyy"),
                              dateTime.ToString("MM"),
                              dateTime.ToString("dd"),
                              dateTime.ToString("HH"),
                              dateTime.ToString("mm"),
                              dateTime.ToString("ss"));

如果您只需要一次,请将它们定义为const not variablesWell首先,我建议这不是内存泄漏的原因,除非您正在采取措施使其成为内存泄漏。现在,您的实际值是否为实际的
DateTime
值,格式为
yyyyMMddHHMMss
?如果是,我建议将其解析为
DateTime
-这将使一切变得更简单。
toyyyymmddhmmss
是常量,因此所有的
to*
都可以预先计算,并且许多路径参数都是固定的。@dotctor Hi,值不断变化字符串与任何其他对象一样会被垃圾收集。例外是程序中定义的字符串代码,它们是实习的,任何你自己实习的字符串都会被记住,直到程序关闭,但所有其他字符串都会在必要时被收集。是的,我的问题措辞很糟糕。对我来说还为时过早:)。你的答案正是我需要的-非常感谢。我现在就编辑我的问题。我建议使用
路径。合并
不要使用
string.Format
,因为它与生成路径相关。@dotctor:是的,这样看起来会更难看,但与平台无关。尽管使用前斜杠也可以。将添加一个示例。