寫日誌函數和持續最佳化,日誌函數持續

來源:互聯網
上載者:User

寫日誌函數和持續最佳化,日誌函數持續

首先看下面的函數

<span style="font-size:18px;">void writelog(char* file, char* msg){FILE*fp=NULL; int nDataLen = strlen(msg);fp=fopen(file,"ab+");//只供讀取 if(fp!=NULL){fwrite(msg, nDataLen, 1, fp);        }         fclose(fp);//關閉檔案}</span>

這個有什麼問題呢?當fp為空白的時候,是不是也會執行fclose(fp)?

修改如下:

<span style="font-size:18px;">void writelog(char* file, char* msg){FILE*fp=NULL; int nDataLen = strlen(msg);fp=fopen(file,"ab+");//只供讀取 if(fp!=NULL){fwrite(msg, nDataLen, 1, fp);        fclose(fp);//關閉檔案}}</span>

這樣是不是就沒問題了呢?

當多線程中調用這個日誌函數的時候,會不會有問題?

所以有一種方法就是加鎖,但這樣效率可能會低一些。

另外一種方法就是用一個線程來接收其他線程的寫日誌的訊息,有一個線程來專門寫日誌。

這樣背景工作執行緒不會阻塞,可提高並發效率。

 

編程和設計的過程,就是一個逐步完善的過程,沒有人一開始會想的很全面,也沒有絕對的錯誤的代碼和設計。如果有明顯的功能錯誤,在設計過程中,就會改正。就比如最開始的那個函數,fp為空白的機率有多少?所以一般不會出錯。當日誌函數只在單線程中使用,那考慮加鎖和多線程訊息也是多餘。所以,要看應用情境。

程式員都很反感需求的變化。需求,就是應用情境。只有在需求確認了,才可以設計出相對匹配的方案出來,不一定是完美的,但肯定是在綜合各種因素的情況下,是最優的。周期是要考慮的,成本是要考慮的。

 

 轉載請註明原創連結:http://blog.csdn.net/wujunokay/article/details/38310669

 



 

 


對於編寫Matlab函數的最佳化問題

關鍵要看f是什麼樣的函數

===========================

M = magic(5);
X = M(2:end,:);
Y = M(1:end-1,:);
ii = 1:size(X,2);
jj = 1:size(X,1);
[II,JJ] = meshgrid(ii,jj);
F = zeros(size(X));
I = find(II+2*JJ>0);
F(I) = 2*X(I)+Y(I);
I = find(II-JJ>0);
F(I) = X(I);

這裡有兩個問題,一個是你的迴圈是i=1:n,而迴圈裡引用了M(i-1,j),會造成數組越界;另一個是f的運算式中i+2*j>0是恒成立的,這樣後面兩個等於白寫了。
 
什是函數最佳化

函數最佳化是指運行效率的最佳化,最佳化後的函數執行速度應高於最佳化之前。

比如,這函數執行的是從指定數v累加計算一直到指定max的計算結果。
但這個寫法效率上講並不高,因為是用for迴圈逐步累加的。對於有
較好數學底子的人來說,只要一行代碼一個算式即解決。
function test(v:Int,max:Int){
for (i=0;i<max;i++){
v = v + i;
}
return v;
}

諸如此類的函數,如果max數值不是很大的話或者調用頻率很高的話對主程式速度影響不大。但如果max數值很大,而且函數每秒要調用好多次就會顯現出最佳化與不最佳化成倍的執行效率差異。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.