Skip to content

Commit

Permalink
grep 処理速度改善
Browse files Browse the repository at this point in the history
UI確認・結果出力の時間間隔をメンバー変数から定数に変更
CMemory::AllocBuffer() における確保バッファサイズの調整記述を更新
  • Loading branch information
beru committed Jun 10, 2018
1 parent cd5834b commit 4fa304e
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 11 deletions.
20 changes: 11 additions & 9 deletions sakura_core/CGrepAgent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@
#include <deque>
#include "sakura_rc.h"

#define UICHECK_INTERVAL_MILLISEC 50 // UI確認の時間間隔
#define ADDTAIL_INTERVAL_MILLISEC 50 // 結果出力の時間間隔

CGrepAgent::CGrepAgent()
: m_bGrepMode( false ) /* Grepモードか */
, m_bGrepRunning( false ) /* Grep処理中 */
, m_dwTickAddTail( 0 )
, m_dwTickUICheck( 0 )
, m_dwTickInterval( 50 )
{
}

Expand Down Expand Up @@ -691,7 +693,7 @@ int CGrepAgent::DoGrepTree(
lpFileName = cGrepEnumFilterFiles.GetFileName( i );

DWORD dwNow = ::GetTickCount();
if (dwNow - m_dwTickUICheck > m_dwTickInterval) {
if (dwNow - m_dwTickUICheck > UICHECK_INTERVAL_MILLISEC) {
m_dwTickUICheck = dwNow;
/* 処理中のユーザー操作を可能にする */
if( !::BlockingHook( pcDlgCancel->GetHwnd() ) ){
Expand Down Expand Up @@ -775,7 +777,7 @@ int CGrepAgent::DoGrepTree(
/* 結果出力 */
if( 0 < cmemMessage.GetStringLength() &&
(*pnHitCount - nHitCountOld) >= 10 &&
(::GetTickCount() - m_dwTickAddTail) > m_dwTickInterval
(::GetTickCount() - m_dwTickAddTail) > ADDTAIL_INTERVAL_MILLISEC
){
AddTail( pcViewDst, cmemMessage, sGrepOption.bGrepStdout );
cmemMessage._SetStringLength(0);
Expand All @@ -800,7 +802,7 @@ int CGrepAgent::DoGrepTree(
lpFileName = cGrepEnumFilterFolders.GetFileName( i );

DWORD dwNow = ::GetTickCount();
if ( dwNow - m_dwTickUICheck > m_dwTickInterval ) {
if ( dwNow - m_dwTickUICheck > UICHECK_INTERVAL_MILLISEC ) {
m_dwTickUICheck = dwNow;
//サブフォルダの探索を再帰呼び出し。
/* 処理中のユーザー操作を可能にする */
Expand Down Expand Up @@ -1181,7 +1183,7 @@ int CGrepAgent::DoGrepFile(
}

DWORD dwNow = ::GetTickCount();
if ( dwNow - m_dwTickUICheck > m_dwTickInterval ) {
if ( dwNow - m_dwTickUICheck > UICHECK_INTERVAL_MILLISEC ) {
m_dwTickUICheck = dwNow;
/* 処理中のユーザー操作を可能にする */
if( !::BlockingHook( pcDlgCancel->GetHwnd() ) ){
Expand Down Expand Up @@ -1217,7 +1219,7 @@ int CGrepAgent::DoGrepFile(
// 2010.08.31 間隔を1/32にする
if( 0 == nLine % 32 ) {
DWORD dwNow = ::GetTickCount();
if ( dwNow - m_dwTickUICheck > m_dwTickInterval ) {
if ( dwNow - m_dwTickUICheck > UICHECK_INTERVAL_MILLISEC ) {
m_dwTickUICheck = dwNow;
if (!::BlockingHook( pcDlgCancel->GetHwnd() )) {
return -1;
Expand Down Expand Up @@ -1417,7 +1419,7 @@ int CGrepAgent::DoGrepFile(
}
if( 0 < cmemMessage.GetStringLength() &&
(nHitCount - nOutputHitCount >= 10) &&
(::GetTickCount() - m_dwTickAddTail) >= m_dwTickInterval
(::GetTickCount() - m_dwTickAddTail) >= ADDTAIL_INTERVAL_MILLISEC
){
nOutputHitCount = nHitCount;
AddTail( pcViewDst, cmemMessage, sGrepOption.bGrepStdout );
Expand Down Expand Up @@ -1670,7 +1672,7 @@ int CGrepAgent::DoGrepReplaceFile(
++nLine;

DWORD dwNow = ::GetTickCount();
if ( dwNow - m_dwTickUICheck > m_dwTickInterval ) {
if ( dwNow - m_dwTickUICheck > UICHECK_INTERVAL_MILLISEC ) {
m_dwTickUICheck = dwNow;
/* 処理中のユーザー操作を可能にする */
if( !::BlockingHook(pcDlgCancel->GetHwnd()) ){
Expand Down Expand Up @@ -1870,7 +1872,7 @@ int CGrepAgent::DoGrepReplaceFile(
output.AppendBuffer(cOutBuffer);

if( 0 < cmemMessage.GetStringLength() &&
(::GetTickCount() - m_dwTickAddTail > m_dwTickInterval)
(::GetTickCount() - m_dwTickAddTail > ADDTAIL_INTERVAL_MILLISEC)
){
nOutputHitCount = nHitCount;
AddTail( pcViewDst, cmemMessage, sGrepOption.bGrepStdout );
Expand Down
1 change: 0 additions & 1 deletion sakura_core/CGrepAgent.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,6 @@ class CGrepAgent : public CDocListenerEx{

DWORD m_dwTickAddTail; // AddTail() を呼び出した時間
DWORD m_dwTickUICheck; // 処理中にユーザーによるUI操作が行われていないか確認した時間
DWORD m_dwTickInterval; // UI確認・結果出力の時間間隔

public: //$$ 仮
bool m_bGrepMode; //!< Grepモードか
Expand Down
4 changes: 3 additions & 1 deletion sakura_core/mem/CMemory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,9 @@ void CMemory::AllocBuffer( int nNewDataLen )
/* 現在のバッファサイズより大きくなった場合のみ再確保する */
if( m_nDataBufSize < nWorkLen ){
// 頻繁な再確保を行わないようにする為、必要量の倍のサイズを確保する
nWorkLen <<= 1;
if (nWorkLen < std::numeric_limits<int>::max() / 2) {
nWorkLen *= 2;
}
// 2014.06.25 有効データ長が0の場合はfree & malloc
if( m_nRawLen == 0 ){
free( m_pRawData );
Expand Down

0 comments on commit 4fa304e

Please sign in to comment.