C# 我可以使用格式而不是子字符串吗?
使用我的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
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:是的,这样看起来会更难看,但与平台无关。尽管使用前斜杠也可以。将添加一个示例。