Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 141ce2b

Browse files
committed
Use GetSystemTimePreciseAsFileTime if available in DateTime.UtcNow
1 parent d2f8561 commit 141ce2b

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

src/classlibnative/bcltype/system.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,37 @@ typedef BOOL (*pfnGetPhoneVersion)(LPOSVERSIONINFO lpVersionInformation);
4141
pfnGetPhoneVersion g_pfnGetPhoneVersion = NULL;
4242
#endif
4343

44+
typedef void(WINAPI *pfnGetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime);
45+
extern pfnGetSystemTimeAsFileTime g_pfnGetSystemTimeAsFileTime;
46+
47+
void WINAPI InitializeGetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
48+
{
49+
pfnGetSystemTimeAsFileTime func = NULL;
50+
51+
#ifndef FEATURE_PAL
52+
HMODULE hKernel32 = WszLoadLibrary(W("kernel32.dll"));
53+
if (hKernel32 != NULL)
54+
{
55+
func = (pfnGetSystemTimeAsFileTime)GetProcAddress(hKernel32, "GetSystemTimePreciseAsFileTime");
56+
}
57+
if (func == NULL)
58+
#endif
59+
{
60+
func = &::GetSystemTimeAsFileTime;
61+
}
62+
63+
g_pfnGetSystemTimeAsFileTime = func;
64+
func(lpSystemTimeAsFileTime);
65+
}
66+
67+
pfnGetSystemTimeAsFileTime g_pfnGetSystemTimeAsFileTime = &InitializeGetSystemTimeAsFileTime;
4468

4569
FCIMPL0(INT64, SystemNative::__GetSystemTimeAsFileTime)
4670
{
4771
FCALL_CONTRACT;
4872

4973
INT64 timestamp;
50-
51-
::GetSystemTimeAsFileTime((FILETIME*)&timestamp);
74+
g_pfnGetSystemTimeAsFileTime((FILETIME*)&timestamp);
5275

5376
#if BIGENDIAN
5477
timestamp = (INT64)(((UINT64)timestamp >> 32) | ((UINT64)timestamp << 32));

0 commit comments

Comments
 (0)