no1234567
no1234567
关注数: 21
粉丝数: 18
发帖数: 399
关注贴吧数: 16
今天刚入手note6,发现耗电详情会突变 拿到手开机,显示83%,将能关的传感器都关掉,保留wifi,普通模式,使用到71%,显示亮屏1小时20分。清理了内存,切换了一次省电模式,放置了一段时间,再打开试用了一次简易模式,看耗电情况,竟然显示亮屏5分钟多点,黑屏5分钟多点。不信邪,把之前的操作重复了一遍,耗电情况没有再突变,到现在61%,亮屏为1小时28分。有遇到这种情况的吗?
一个简单的临时数据库 ' ************************************************************************* ' Copyright 2017--2020 the Stone Work Space ' All Rights Reserved ' ************************************************************************* ' 完全在内存中操作,创建的空间大小依赖系统物理内存 ' ************************************************************************* Option Explicit '分配,清除内存 Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (ByVal Dest As Any, ByVal numBytes As Long) Private Declare Sub FillMemory Lib "kernel32" Alias "RtlFillMemory" (ByVal Dest As Any, ByVal numBytes As Long, ByVal Fill As Byte) Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalReAlloc Lib "kernel32" (ByVal hMem As Long, ByVal dwBytes As Long, ByVal wFlags As Long) As Long Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long Private Const GMEM_FIXED = &H0 Private Const GMEM_ZEROINIT = &H40 Private Const GMEM_MOVEABLE = &H2 Private selectedMEMaddr As Long Public Type objIndexType '因为copymemory需要内存对齐,因此全部用long类型 objType As Long '默认为0 Id As Long 'ID 号 唯一 ParentID As Long '上级的ID号 PrevID As Long '上一个对象的ID号 NextID As Long '下一个对象的ID号 ChildID As Long '下级的首个ID号 ChildCount As Long '拥有子ID的个数 Size As Long '数据区域的大小 SizeMax As Long '占用数据区大小 DataP As Long '数据区域所在内存的地址 End Type Private Type SpaceType SpaceName As String SpaceType As Byte objCount As Long objID As Long memAddr As Long '索引内存地址指针 DataAddr As Long '数据块内存地址指针 newDataAddr As Long '可以分配的数据块内存地址 bak(99) As Byte '备用 End Type Private Space As SpaceType Function CreateObj(ByVal oSize As Long, Optional ByVal oType As Byte, Optional ByVal oID As Long = 0) As objIndexType '大小,类型,父ID Dim temp1 As objIndexType, temp2 As objIndexType Dim pID As Long, TotalSize As Long TotalSize = Space.newDataAddr + Len(temp1) + oSize '更新数据块的空闲地址 If TotalSize > GlobalSize(Space.DataAddr) Then Exit Function '超出内存空间大小,取消操作 temp1.objType = oType temp1.ParentID = oID temp1.SizeMax = oSize temp1.Id = Space.objID MemIndex(temp1.Id) = Space.newDataAddr '更新索引地址 If oSize > 0 Then temp1.DataP = Space.newDataAddr + Len(temp1) Space.objID = Space.objID + 1 '更新id的计数 Space.objCount = Space.objCount + 1 '更新数量 Space.newDataAddr = TotalSize temp2 = objIndex(oID) '获取上一级对象 pID = temp2.ChildID '获取子节点ID,判断是否为空节点 If pID > Space.objID Then Err.Raise 1000, , "sdsds" temp2.ChildID = temp1.Id '添加子节点,新节点始终距离最短 temp2.ChildCount = temp2.ChildCount + 1 '更新子ID的个数 objIndex(oID) = temp2 If pID > 0 Then '非空节点,创建周边关系 temp2 = objIndex(pID) temp1.NextID = pID temp2.PrevID = temp1.Id objIndex(pID) = temp2 End If objIndex(temp1.Id) = temp1 End Function Function FindObj(ByVal NameorIndex As Variant) As Long '返回查找对象的ID号 Dim index As Long, i As Long, s As String '查找 If VarType(NameorIndex) = vbString Then For i = 1 To Space.objCount s = Data(i) If s = NameorIndex Then index = i: Exit For Next Else index = Val(NameorIndex) If index < 0 Then index = 0 '避免过小 If MemIndex(index) = 0 Then index = 0 '避免不存在 End If FindObj = index End Function Function Deleteobj(ByVal NameorIndex As Variant) As Long Dim index As Long, i As Long, s As String, temp As objIndexType, temp2 As objIndexType '查找 index = FindObj(NameorIndex) '取得指定目标的id If index = 0 Then Exit Function temp = objIndex(index) '更新索引关系 If temp.PrevID > 0 Then temp2 = objIndex(temp.PrevID) temp2.NextID = temp.NextID objIndex(temp.PrevID) = temp2 End If If temp.NextID > 0 Then temp2 = objIndex(temp.NextID) temp2.PrevID = temp.PrevID objIndex(temp.NextID) = temp2 End If '更新上级关系 temp2 = objIndex(temp.ParentID) '读取上一级 If temp.PrevID = 0 Then '位于第一个 temp2.ChildID = temp.NextID End If temp2.ChildCount = temp2.ChildCount - 1 '更新子ID的个数 objIndex(temp.ParentID) = temp2 '清除周边关系,保留上下关系,可以通过检索恢复 temp.PrevID = 0 temp.NextID = 0 objIndex(index) = temp End Function Function ListObj(ByVal NameorIndex As Variant) As Long() '枚举(指定节点下)所有子节点 Dim lID As Long, LL() As Long, n As Long 'Dim o As objIndexType lID = FindObj(NameorIndex) '取得指定目标的id lID = objIndex(lID).ChildID '取得制定目标的子id ReDim LL(0) n = 0 If lID > 0 Then '存在子id Do n = n + 1 '开始计数 ReDim Preserve LL(n) '更新记录数组 LL(n) = lID lID = objIndex(lID).NextID '获取下一个子ID Loop Until lID = 0 '判断是否为末尾 LL(0) = n '记录个数,可选 End If ListObj = LL Erase LL End Function Private Sub Class_Terminate() Clear End Sub Function CreateStruct() As objIndexType End Function Public Property Get Data(ByVal NameorIndex As Variant) As Byte() '读取数据区内容 Dim dID As Long, t() As Byte, o As objIndexType dID = F
1
下一页