我可以使用 Format 而不是使用 substring 吗?
Can I use Format instead of using 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 = 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 ToYYYMMDDHHMMSS = "YYYMMDDHHMMSS";
我应该补充说 "YYYMMDDHHMMSS" 是一个总是变化的时间戳
{道歉)
我的猜测是您的真实代码具有类似 20150225071945
的值 - 所以实际上不是文字 YYYYMMDDHHMMSS
。如果是这种情况,我会将值解析为 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);
或使用Path.Combine
:
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"));
在我的 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 ToYYYMMDDHHMMSS = "YYYMMDDHHMMSS";
我应该补充说 "YYYMMDDHHMMSS" 是一个总是变化的时间戳 {道歉)
我的猜测是您的真实代码具有类似 20150225071945
的值 - 所以实际上不是文字 YYYYMMDDHHMMSS
。如果是这种情况,我会将值解析为 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);
或使用Path.Combine
:
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"));