最近在寫一隻Windows Form 的程式,這隻程式最主要的功能是計算公司一年來所有的工作天數,休假天數,及調休天數,這隻程式其實沒什麼難度,但完成時我發現怎麼程式執行效率很差,於是就需要來找出問題的地方在那我上網查詢如何測試程式效率的方法查到使用stopwatch,
命名空間:System.Diagnostics
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{ //try catch 測試 未發生例外
Stopwatch stopwatch;
String num = "5";
int result;
stopwatch = Stopwatch.StartNew();
for (int i = 1; i <= 1000; i++)
{
try
{
result = int.Parse(num);
}
catch
{
result = 0;
}
}
stopwatch.Stop();
textBox1.Text = stopwatch.ElapsedTicks.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
//int.TryParse 測試 未發生例外
Stopwatch stopwatch;
String num = "5";
int result;
int nn;
stopwatch = Stopwatch.StartNew();
for (int i = 1; i <= 1000; i++)
{
if (!int.TryParse(num, out nn))
result = 0;
}
stopwatch.Stop();
textBox1.Text = stopwatch.ElapsedTicks.ToString();
}
private void button3_Click(object sender, EventArgs e)
{
////try catch 測試 發生例外
Stopwatch stopwatch;
String num = "5a";
int result;
stopwatch = Stopwatch.StartNew();
for (int i = 1; i <= 1000; i++)
{
try
{
result = int.Parse(num);
}
catch
{
result = 0;
}
}
stopwatch.Stop();
textBox1.Text = stopwatch.ElapsedTicks.ToString();
}
private void button4_Click(object sender, EventArgs e)
{
Stopwatch stopwatch;
String num = "5a";
int result;
int nn;
stopwatch = Stopwatch.StartNew();
for (int i = 1; i <= 1000; i++)
{
if (!int.TryParse(num, out nn))
result = 0;
}
stopwatch.Stop();
textBox1.Text = stopwatch.ElapsedTicks.ToString();
}
}
}
執行結果:
上圖可以發現,平常使用try..catch對效率是差不多的,但是一出現例外狀況,差異就很大了,也就是能把預期會出現的意外狀況盡量用IF判斷掉,不然就像我這次寫程式一樣,因為效率不好,搞到後來大幅的改寫,那才是真的叫累人~
2008年2月25日 星期一
利用stopwatch 測試程式效率 && try.catch 效率測試
張貼者:
拍郎
於
2/25/2008 03:59:00 下午
0
意見
標籤: 程式設計
2007年12月7日 星期五
原來我這麼不值錢
今天在藍色小鋪的討論區看到一串討論
我算是在台灣軟體產業最基層的黑手(程式設計),
在台灣一般來講大多數的企業都不重視這一塊,
大多數的程式設計師薪水都不算高,
http://edu.uuu.com.tw/job/job_detail.asp?id=839&company_id=23929058
地點:台北市精華商業地段
工作經驗:
1.兩年以上C# .NET程式編程經驗,熟Windows,Web-base及元件開發
2.具Oracle 或 SQL Server 資料庫經驗
3.良好的溝通技巧與團隊合作
4.善於解決問題及面對挑戰
月薪:26000 ~ 28000
今天看到這一篇,才真的想哭呢,
一般來講在軟體產業做大都要加班,
但台灣大多數企業加班都沒有加班費,
很多人一天工作十二的小時,
26000/22天/12小時=98
只比麥當勞的臨時工阿婆的時薪
多出3元,那我不如去打工算了,
以前對程式設計師~的前景覺得不錯
現在唷~真的是值得堪憂阿~
看到這樣誰會想寫一輩子的程式~~
張貼者:
拍郎
於
12/07/2007 09:29:00 下午
0
意見
HOW TO Data IMPORT/EXPORT SQL SERVER 2005 DATA
SQL 2000 at interface have Import/Export wizard, but I can't find the Data Import/Export Wizard at SQL 2005 I to look into MSDN,I find SQL 2005 Express it is a execute file.
In a command prompt window, run DTSWizard.exe, located in
C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTSWizard.exe.
Execute it,I will find Import/Export wizard.
張貼者:
拍郎
於
12/07/2007 01:17:00 下午
0
意見
標籤: 程式設計
2007年10月17日 星期三
如何部署 ASP.NET CRYSTAL REPORT
最近公司買了一台新SERVER,
現在要把系統導入在新機器上,
裝完之後發現.NET的程式都沒有問題,
但是在看報表時確都無法開啟,
還是查了一下資料,結果發現還是有套件需要安裝,
(1) CRRedist2005_x86.msi 報表套件 (必要安裝)
取得方法在安裝有VS2005的機器上
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports\CRRedist2005_x86.msi
(2) CRREdist2005_x86_cht.msi 中文語言套件(非必要安裝)
取得方法在安裝有VS2005的機器上
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports\zh-cht\CRREdist2005_x86_cht.msi
張貼者:
拍郎
於
10/17/2007 09:10:00 上午
0
意見
標籤: 程式設計
2007年7月13日 星期五
C#.Net 如何修改圖片大小
今天我老大問我.Net 可不可以修改圖檔,我回答不知道沒有用過~
我後來找了一下資料在 topcat姍舞之間的極度凝聚這個網站找到VB的範例
我參考他的範例改為C#
也是一樣一開始像載入二個命名空間
using System.Drawing;
using System.Drawing.Imaging;
System.Drawing.Image g = System.Drawing.Image.FromFile("D:\\abc.jpg");
ImageFormat format = g.RawFormat;
int width = 800; //寬度
int heigt = 600; //高度
Bitmap imgoutput = new Bitmap(g,width,heigt); //輸出一個新圖片
imgoutput.Save("D:\\abc2.jpg",format); //存檔路徑,格式
//釋放資
g.Dispose();
imgoutput.Dispose();
張貼者:
拍郎
於
7/13/2007 01:01:00 下午
0
意見
標籤: 程式設計
2007年7月12日 星期四
ReportViewer 部署問題
昨天寫了一隻含有ReportView的.net 應用程式 ,寫完後拿到別台安裝之後,發現報表功能無法使用,在開發的電腦上一切正常,但拿到別台機器上確無法使用。上網查了一下資料發現是少了ReportVeiw的元件,只要在使用者電腦上安裝Reporting Service的Redistribution Pack,這個Pack在有開發環境的電腦裡面都有,所以使用者會看到不到。
一般這個pack取得方法,在開發環境的電腦可以取得。
轉發套件:
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\ReportViewer\ReportViewer.exe
或
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=e7d661ba-dc95-4eb3-8916-3e31340ddc2c
還有另一個語言套件
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\ReportViewer\zh-CHT\ReportViewerLP.exe
或
http://www.microsoft.com/downloads/details.aspx?FamilyId=E3D3071B-D919-4FF9-9696-C11D312A36A0&displaylang=zh-tw
張貼者:
拍郎
於
7/12/2007 02:40:00 下午
0
意見
標籤: 程式設計
2007年7月7日 星期六
C# 如何取得資料夾檔案的個數
前幾天為了取得某的資料夾裡全部的Excel檔案,
去更新資料庫,發現一個問題要如何去取得裡面的檔案個數,
讓程式跑回圈做更新,查了一下google發現以下:
DirectoryInfo di = new DirectoryInfo("資料夾路徑");
FileInfo[] files = di.GetFiles("*.xls"); //篩選副檔名為xls的 //取得所有的excel檔 會存入陣列裡面
int fileCount = files.Length; //取得個數
張貼者:
拍郎
於
7/07/2007 09:25:00 上午
0
意見
標籤: 程式設計
2007年7月5日 星期四
StreamReader 讀取中文亂碼解決方法
在C#讀取記事本時,在讀取中文時,會出現亂碼的問題
作業系統在檔案通常採用Unicode 編碼
但中文還是以Big5編碼才會造成亂碼的情況
本來會造成亂碼的語法如下:
Dim reader As StreamReader =
New StreamReader(FileName)
用 System.Text.Encoding.Default 告訴 StreamReader 目前作業系統的編碼即可。
[VB .Net] 的寫法
Dim reader As StreamReader = _
New StreamReader(FileName, System.Text.Encoding.Default)
[C# .Net] 的寫法
StreamReader reader = _
New StreamReader(FileName, System.Text.Encoding.Default)
System.Text.Encoding 可參考 MSDN:
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemtextencodingclasstopic.asp
張貼者:
拍郎
於
7/05/2007 10:41:00 下午
7
意見
標籤: 程式設計
2007年7月2日 星期一
Web.config 加密與解密
Web.config 加密與解密
參考資料:
http://aspadvice.com/blogs/plitwin/archive/2005/11/15/13830.aspx
常常我們會在web.config 存著連線字串的密碼,
在網路上查詢到可以使用ASP.NET 2.0 另一個不錯的功能是對於Web.config加密與解密的能力。
aspnet_regiis.exe 以命令列方式來做資料加密與解密。
虛擬目錄方式:
(1)加密(encrypt):
對IIS的虛擬根目錄為名稱:WebSite1的連線字串 Sections做加密,命列列輸入為
aspnet_regiis -pe "connectionStrings" -app "/ WebSite1"
(2)解密(decrypt):
對IIS的虛擬根目錄為名稱:WebSite1的連線字串 Sections做解密,命列列輸入為
aspnet_regiis -pd "connectionStrings" -app "/ WebSite1"
另一方式是非虛擬目錄方式,以指定檔案路徑來處理:
要在 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 目錄下~~
(1)加密:
aspnet_regiis -pef "connectionStrings" "C:\Inetpub\dotnet2"
(2)解密:
aspnet_regiis -pdf "connectionStrings" "C:\Inetpub\dotnet2"
張貼者:
拍郎
於
7/02/2007 01:24:00 上午
0
意見
標籤: 程式設計
2007年6月26日 星期二
C# 寫入Excel
C# 寫入Excel 方法~
這個方法是自己摸來的,
但缺點就是最後Excel處理程序無法釋放,
往後在貼如何釋放處理程序
Excel.Application excelApp = new Excel.Application();
Excel.Workbook excelBook;
Excel.Worksheet excelsheet;
String ExcelSource;
ExcelSource = "檔案路徑"; //Excel來源路徑
String workbookPath = System.Windows.Forms.Application.StartupPath + \\excelSource;
//應用程式的起始目錄
workbookPath += ExcelSource; //應用程式的起始目錄+檔案路徑
excelBook = excelApp.Workbooks.Add(workbookPath);
excelsheet = (Excel.Worksheet)(excelBook.Worksheets[1]); //選擇活頁簿
//接下來寫入資料
excelsheet.Cells[1, 1] = dr["Num"].ToString(); //都是從1開始
excelBook.SaveCopyAs(路徑); //存檔
張貼者:
拍郎
於
6/26/2007 01:17:00 下午
0
意見
標籤: 程式設計