Visual Studio Code 常用快速鍵

2017年11月19日 星期日

Visual Studio Code 快速鍵
Shift+alt+f=foramt文件格式
Ctrl+d+d=快速選上相同字詞
Alt+滑鼠左鍵=可以連續選中不同位置,同時一起變更
Ctrl+b=快速把左邊視窗打開或收起來
Ctrl+p=快速跳到某個檔案
Shift+ctrl+o=快速跳出屬性和方法
Alt+前或後=類似vs裡面的往前或往後的箭頭
Alt+j=快速跳出intellisense,這是有吃我設定的才會生效,因為我有改掉快速鍵
F1=跳出快速選單,很多外掛相關字會在這裡面
Ctrl+alt+c=快速跳出command line
Ctrl+k+o=快速打開目前目錄的資料夾
Alt+上或下=可以快速把此行搬到上一行或下一行
SC快速鍵,加入框架
Ctrl + ENter快速換行


常用Visual Studio 快速鍵
Ctrl + M + Spec : 快速排版
Alt + 上/下:移動換行
Ctrl + Shift + U : 轉大寫
Ctrl + [ + s :快速跳至檔案

Read more...

git Http 501 錯誤處理

2017年11月3日 星期五

新開一個bratch要push時發生錯誤,訊息如下:HTTP 501 curl 22 Recv failure: Connection was aborted


google一下發現原來Post有限制1MB的限制
文章如下:
Maximum size in bytes of the buffer used by smart HTTP transports when POSTing data to the remote system. For requests larger than this buffer size, HTTP/1.1 and Transfer-Encoding: chunked is used to avoid creating a massive pack file locally. Default is 1 MiB, which is sufficient for most requests.


文章如下:https://www.kernel.org/pub/software/scm/git/docs/git-config.html


解法如下: 增加postbuffer空間即可,可用以下語法增加
git config --global http.postBuffer 157286400
參考網址:
https://confluence.atlassian.com/stashkb/git-push-fails-fatal-the-remote-end-hung-up-unexpectedly-282988530.html

Read more...

npm proxy設定

2017年10月24日 星期二

因為公司電腦要透過proxy才能出去,在使用npm套件管理時若沒設定proxy會出現407 Proxy Authentication Required錯誤訊息


我們可以開啟這檔案c:\users\xxx\.npmrc


輸入以下設定即可

https-proxy=http://username:password@proxy.xxxx.com:port/
proxy=http://username:password@proxy.xxxx.com:port

Read more...

Lazy 性能優化,實現延遲初始化

2017年4月13日 星期四

.Net 4.0中推出Lazy來實現延遲初始化以達到性能優化的目的
例如:建立某個物件時需要很多資源,但是在系統運行中不一定會把上用到
這時就可透過延遲初始化來達到目的,可以提高程式效率以更節省資源。

以下透過範例來說明:




執行結果

由上範例可以知道,剛開始時並沒有執行初始化,而是到car.Value.Name時才真正去載入。




參考來源:http://www.cnblogs.com/yunfeifei/p/3907726.html

Read more...

設定自動與內部主機時間同步,使用net time指令

2017年2月12日 星期日

當公司有些主機無法對外連線,所以無法使用與外部同步的服務,可以使用此語法,讓內部主機可以同步

例:
可對外主機 192.168.1.11 (A機器)
不同對外主機 192.168.1.12(B機器)

此時可在B機器操作以下方式
1.開啟命令提示字元
2.使用net use 指令跟A機器建立連線 => net use \\192.168.1.11
3.輸入使用者名稱與密碼
4執行net time \\192.168.1.11 /set /y


也可寫成批次檔,如下內容:
net use \\IP或主機名稱 密碼 /user:使用者名稱 --->連線對時主機
net time \\IP或主機名稱 /set /y --->校正時間
net use \\IP或主機名稱 /del --->中斷連線




參考來源:http://ithelp.ithome.com.tw/articles/10174201

Read more...

yield

2017年1月9日 星期一

yield,它可以讓程式員以傳回每個元素的方式來自動產生IEnumerable<T>物件

例如下列程式會回傳1-5 五個數字的IEnumerable<T>物件:

這是一般的寫法,因為List<T>有實作IEnumerable<T>,所以很自然的會用List<T>作為產製IEnumerable<T>的寫法。

        static IEnumerable<int> GetCollection1()
        {
            List<int> list = new List<int>();
            for (int i = 1; i <= 5; i++)
            {
                list.Add(i);
            }
            return list;
        }

改為yield寫法,看起來更為精簡,yield指令會告訴編譯器,這一段函式的回傳值IEnumerable<T>內的元素由yield return所回傳的物件來填充,因此可省下額外使用集合物件事先封裝的工作。

  
        static IEnumerable<int> GetCollection2()
        {
            for (int i = 1; i <= 5; i++)
            {
                yield return i;
            }
        }

 

比較二個方式的效能

    private static int testMax = 5000000;
    static void Main(string[] args)
    {

        Stopwatch sw = new Stopwatch();
        sw.Start();
        var result = GetCollection1();
        sw.Stop();
        Console.WriteLine("Collection1:{0},count:{1}", sw.ElapsedMilliseconds, result.Count());

        sw.Restart();
        var result2 = GetCollection2();
        sw.Stop();
        Console.WriteLine("Collection2:{0},count:{1}", sw.ElapsedMilliseconds, result2.Count());

        sw.Restart();
        var result4 = GetCollection4();
        sw.Stop();
        Console.WriteLine("Collection4:{0},count:{1}", sw.ElapsedMilliseconds, result4.Count());

	sw.Restart();
        var result5 = GetCollection5();
        sw.Stop();
        Console.WriteLine("Collection5:{0},count:{1}", sw.ElapsedMilliseconds, result5.Count());

    }

    static IEnumerable<int> GetCollection1()
    {
        List<int> list = new List<int>();
        for (int i = 1; i <= testMax; i++)
        {
            list.Add(i);
        }
        return list;
    }

    static IEnumerable<int> GetCollection2()
    {
        for (int i = 1; i <= testMax; i++)
        {
            yield return i;
        }
    }
    
    static IEnumerable<Student> GetCollection4()
    {
        for (int i = 1; i <= testMax; i++)
        {
            yield return  new Student()
            {
                Id = i,
                Name = i.ToString()
            };
        }
    }

    static IEnumerable<Student> GetCollection5()
    {

        List<Student> studentList = new List<Student>();
        for (int i = 1; i <= testMax; i++)
        {
            studentList.Add(new Student() {Id=i,Name=i.ToString() });
        }
        return studentList;
    }
    
    public class Student
    {
        public int Id { get; set; }

        public string Name { get; set; }
    }

 

 

 

執行結果,我們發現使用yield寫法,所執行時間為0,這是因為延遲查詢,當我們對這個集合查詢時才會真正載入資料。

image

 

//查詢階段才會真正載入資料
Console.WriteLine(result4.Where(o => o.Id == 700).Select(o => o.Name).FirstOrDefault());

 

若是在foreach這類迭代運算中要中斷執行,則可利用yield break來中斷,如下程式碼:

    static IEnumerable<int> GetCollection3(IEnumerable<int> NumberSeries)
    {
        foreach (var number in NumberSeries)
        {
            if (number > 10)
            {
                yield break;
            }
            else
            {
                yield return number;
            }
        }
    }

執行結果

image

Read more...