2016-11-03 63 views
0

我有一個DLL用C++編寫如下:我應該在DLL的函數中使用靜態變量嗎?

extern "C" __declspec(dllexport) int GetConfig(const char* param_name) 
{ 
    MyConfig config; 
    config.LoadConfigFromFile("conf.ini"); 
    return config.get_config(param_name); 
} 

GetConfig(const char*)是用不同的工藝非常頻繁地調用。該LoadConfigFromFile()是相當昂貴的,所以我想作一些靜態的,例如:

我的問題是:是我的想法是否可行?有其他方法可以實現我的需求嗎?

+0

這不是太可怕和優化。請注意,它會改變你的程序行爲,但是。以前可以編輯ini並立即啓動它,但是對於靜態的,他們必須重新啓動程序。 – StoryTeller

+0

@StoryTeller對我而言並不重要。那麼你能否告訴我如何克服這種情況? –

+0

您需要使用操作系統來獲取並緩存上次文件修改的時間戳。它應該比閱讀整個文件要快得多,所以你會看到性能提升,我想。 – StoryTeller

回答

0

不幸的是,它不是直接回答你的問題,而是你問替代方法來實現需求,這可能會有幫助。

#include <windows.h> 
#include <stdio.h> 
#include <ctime> 

using namespace std; 

int main() 
{ 
    HANDLE _configfile; 
    FILETIME _configFileTimeCreate, _configFileTimeModified; 
    SYSTEMTIME _systemUTC; 

    time_t start_time = time(NULL); 
    for (;;) 
    { 
     time_t now = time(NULL); 
     time_t diff = now - start_time; 

     if ((diff % 10) == 0) { 

      _configfile = CreateFile(L"config.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 

      if(_configfile == INVALID_HANDLE_VALUE) { 
       printf("Could not open file, error %ul\n", GetLastError()); 
       return -1; 
      } 

      if(!GetFileTime(_configfile, &_configFileTimeCreate, NULL, &_configFileTimeModified)) { 
       printf("Something wrong!\n"); 
       return FALSE; 
      } 
      else { 
       FileTimeToSystemTime(&_configFileTimeModified, &_systemUTC); 
       printf("UTC System Time format:\n"); 
       printf("Modified on: %02d/%02d/%d %02d:%02d\n", _systemUTC.wDay, _systemUTC.wMonth, _systemUTC.wYear, 
                   _systemUTC.wHour, _systemUTC.wMinute); 
      } 

      CloseHandle(_configfile); 
     } 
     Sleep(1000); 
    } 

    return 0; 
} 
相關問題