mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-03 06:18:28 +01:00
Switched to low-level io methods for better performance
This commit is contained in:
parent
6fbeee841f
commit
758d18a652
@@ -83,7 +83,7 @@ namespace MediaBrowser.Controller.IO
|
||||
List<string> paths = affectedPaths;
|
||||
affectedPaths = new List<string>();
|
||||
|
||||
await ProcessPathChanges(paths);
|
||||
await ProcessPathChanges(paths).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async Task ProcessPathChanges(IEnumerable<string> paths)
|
||||
@@ -105,11 +105,11 @@ namespace MediaBrowser.Controller.IO
|
||||
return folder != null && folder.IsRoot;
|
||||
}))
|
||||
{
|
||||
await Kernel.Instance.ReloadRoot();
|
||||
await Kernel.Instance.ReloadRoot().ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await Task.WhenAll(itemsToRefresh.Select(i => Kernel.Instance.ReloadItem(i)));
|
||||
await Task.WhenAll(itemsToRefresh.Select(i => Kernel.Instance.ReloadItem(i))).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
96
MediaBrowser.Controller/IO/FileData.cs
Normal file
96
MediaBrowser.Controller/IO/FileData.cs
Normal file
@@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace MediaBrowser.Controller.IO
|
||||
{
|
||||
public static class FileData
|
||||
{
|
||||
public const int MAX_PATH = 260;
|
||||
public const int MAX_ALTERNATE = 14;
|
||||
|
||||
public static WIN32_FIND_DATA GetFileData(string fileName)
|
||||
{
|
||||
WIN32_FIND_DATA data;
|
||||
IntPtr handle = FindFirstFile(fileName, out data);
|
||||
if (handle == IntPtr.Zero)
|
||||
throw new IOException("FindFirstFile failed");
|
||||
FindClose(handle);
|
||||
return data;
|
||||
}
|
||||
|
||||
[DllImport("kernel32")]
|
||||
private static extern IntPtr FindFirstFile(string fileName, out WIN32_FIND_DATA data);
|
||||
|
||||
[DllImport("kernel32")]
|
||||
private static extern bool FindClose(IntPtr hFindFile);
|
||||
|
||||
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct FILETIME
|
||||
{
|
||||
public uint dwLowDateTime;
|
||||
public uint dwHighDateTime;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||||
public struct WIN32_FIND_DATA
|
||||
{
|
||||
public FileAttributes dwFileAttributes;
|
||||
public FILETIME ftCreationTime;
|
||||
public FILETIME ftLastAccessTime;
|
||||
public FILETIME ftLastWriteTime;
|
||||
public int nFileSizeHigh;
|
||||
public int nFileSizeLow;
|
||||
public int dwReserved0;
|
||||
public int dwReserved1;
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = FileData.MAX_PATH)]
|
||||
public string cFileName;
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = FileData.MAX_ALTERNATE)]
|
||||
public string cAlternate;
|
||||
|
||||
public bool IsDirectory
|
||||
{
|
||||
get
|
||||
{
|
||||
return dwFileAttributes.HasFlag(FileAttributes.Directory);
|
||||
}
|
||||
}
|
||||
|
||||
public DateTime CreationTime
|
||||
{
|
||||
get
|
||||
{
|
||||
return ParseFileTime(ftCreationTime);
|
||||
}
|
||||
}
|
||||
|
||||
public DateTime LastAccessTime
|
||||
{
|
||||
get
|
||||
{
|
||||
return ParseFileTime(ftLastAccessTime);
|
||||
}
|
||||
}
|
||||
|
||||
public DateTime LastWriteTime
|
||||
{
|
||||
get
|
||||
{
|
||||
return ParseFileTime(ftLastWriteTime);
|
||||
}
|
||||
}
|
||||
|
||||
private DateTime ParseFileTime(FILETIME filetime)
|
||||
{
|
||||
long highBits = filetime.dwHighDateTime;
|
||||
highBits = highBits << 32;
|
||||
return DateTime.FromFileTime(highBits + (long)filetime.dwLowDateTime);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user