/// <summary> /// 释放内存及对资源包FileStream的控制 /// </summary> public void Release() { try { m_PackageInfosDic.Clear(); m_FilesPackInfoDic.Clear(); List <string> packageNamesList = new List <string> (m_FileStreamDic.Keys); for (int n = 0; n < packageNamesList.Count; n++) { FileStream tempStream = m_FileStreamDic [packageNamesList [n]]; tempStream.Flush(); tempStream.Close(); tempStream = null; } m_FileStreamDic.Clear(); packageNamesList.Clear(); packageNamesList = null; m_PackageInfosDic = null; m_FilesPackInfoDic = null; m_FileStreamDic = null; } catch (Exception e) { ConsoleMgr.LogRed(e.ToString()); } }
private static double LoadFilesBySelf() { List <string> packedFileNames = PackedFileMgr.Ins.PackedFileNames; SpeedTester2 = new SpeedTester("我的方案: "); for (int i = 0; i < packedFileNames.Count; i++) { string fileName = packedFileNames[i]; byte[] returnData = PackedFileMgr.Ins.Load(fileName); if ((returnData != null) && (returnData.Length > 0)) { SelfFileCount++; SpeedTester2.AddLoaded((uint)returnData.Length); } else { ConsoleMgr.LogRed("错误:获取不到文件名为" + fileName + "的数据,该文件数据可能为空!"); } } if (SelfFileCount == PackedFileMgr.Ins.PackFilesCount) { double mySpeed = SpeedTester2.GetSpeed(); return(mySpeed); } return(0); }
public double GetSpeed() { TimeSpan span = DateTime.Now - BeginTime; double costSeconds = span.TotalSeconds; // ConsoleMgr.LogRed (costSeconds.ToString ()); double totalMB = (double)TotalBytes / (1024 * 1024); double speed = totalMB / costSeconds; string str = frontStr + speed.ToString("F3") + "MB/S"; ConsoleMgr.LogRed(str); return(speed); }
public static void Main(string[] args) { //方案1:用系统自带API SpeedTester1 = new SpeedTester("系统方案: "); LoadFiles(); double systemSpeed = SpeedTester1.GetSpeed(); Console.WriteLine(""); //方案2:用自写API double mySpeed = LoadFilesBySelf(); double compare = mySpeed / systemSpeed; Console.WriteLine(""); ConsoleMgr.LogRed("我的方案速率是系统方案速率的 " + compare.ToString("F2") + " 倍"); PackedFileMgr.Ins.Release(); }
public static void Read(ref Dictionary <string, PackageInfo> packageInfosDic, ref Dictionary <string, PackedFileInfo> filesPackInfoDic, string packagePath) { try { FileStream fs = new FileStream(packagePath, FileMode.Open); PackageInfo tempPackageInfo = new PackageInfo(); //1.资源包信息区域 //1.1资源包版本(int) byte[] resVersionData = new byte[4]; fs.Read(resVersionData, 0, 4); tempPackageInfo.Version = MyBinaryReader.ReadInt(resVersionData); resVersionData = null; //1.2读取资源包类型名字节大小(ushort),占2个字节 byte[] resTypeNameSizeData = new byte[2]; fs.Read(resTypeNameSizeData, 0, 2); ushort resTypeNameSize = MyBinaryReader.ReadUshort(resTypeNameSizeData); resTypeNameSizeData = null; //1.3读取资源包类型名称 byte[] resTypeNameData = new byte[resTypeNameSize]; fs.Read(resTypeNameData, 0, resTypeNameSize); tempPackageInfo.TypeName = MyBinaryReader.ReadString(resTypeNameData); resTypeNameData = null; //1.4读取资源包总共字节大小(uint) byte[] resTotalSizeData = new byte[4]; fs.Read(resTotalSizeData, 0, 4); tempPackageInfo.TotalSize = MyBinaryReader.ReadUint(resTotalSizeData); resTotalSizeData = null; //获取资源包名称 FileInfo packageFileInfo = new FileInfo(packagePath); string packageName = packageFileInfo.Name.Split('.')[0]; packageInfosDic.Add(packageName, tempPackageInfo); //2.文件信息集合区域 //2.1文件信息集合所占字节大小(int) byte[] infoRegionSizeData = new byte[4]; fs.Read(infoRegionSizeData, 0, 4); int infoRegionSize = MyBinaryReader.ReadInt(infoRegionSizeData); infoRegionSizeData = null; //2.2文件信息集合里的文件信息个数(int) byte[] filesCountData = new byte[4]; fs.Read(filesCountData, 0, 4); int filesCount = MyBinaryReader.ReadInt(filesCountData); filesCountData = null; int fileInfosRegionSize = 4 + 4; for (int n = 0; n < filesCount; n++) { PackedFileInfo tempInfo = new PackedFileInfo(); //2.3.1文件名字节大小(ushort) byte[] nameLengthData = new byte[2]; fs.Read(nameLengthData, 0, 2); ushort nameLength = MyBinaryReader.ReadUshort(nameLengthData); fileInfosRegionSize += 2; nameLengthData = null; //2.3.2文件名(UTF8) byte[] nameData = new byte[nameLength]; fs.Read(nameData, 0, nameLength); string fileName = MyBinaryReader.ReadString(nameData); fileInfosRegionSize += nameLength; nameData = null; //2.3.3文件起始位置(uint) byte[] startPosData = new byte[4]; fs.Read(startPosData, 0, 4); tempInfo.StartPos = MyBinaryReader.ReadUint(startPosData); fileInfosRegionSize += 4; startPosData = null; //2.3.4文件大小(int) byte[] sizeData = new byte[4]; fs.Read(sizeData, 0, 4); tempInfo.Size = MyBinaryReader.ReadInt(sizeData); fileInfosRegionSize += 4; sizeData = null; tempInfo.PackageName = packageName; if (!filesPackInfoDic.ContainsKey(fileName)) { filesPackInfoDic.Add(fileName, tempInfo); } else { ConsoleMgr.LogRed("有重复文件名:" + fileName); } } if (fileInfosRegionSize != infoRegionSize) { ConsoleMgr.LogRed("错误:文件信息集合区域的字节大小计算有误!"); } fs.Flush(); fs.Close(); } catch (Exception e) { ConsoleMgr.LogRed(e.ToString()); } }