簡單紀錄一下
主要差異在tolookup會馬上執行, groupby 會有延遲執行的特性
ref : https://stackoverflow.com/questions/43661143/use-selectmany-and-groupby
2020年4月20日 星期一
2020年4月6日 星期一
[Resharper] short cut
基本快捷鍵紀錄
- ReSharper Shortcuts (at least you should know)
- Quick Action: Alt+Enter
- Refactor This... : Ctrl+Shift+R
- Extract Method: Ctrl+R, M
- Rename: Ctrl+R, R
- Introduce Variable: Ctrl+R, V
- Introduce Field: Ctrl+R, F
- Introduce Parameter: Ctrl+R, P
- Inline variable/field/parameter/method/class: Ctrl+R, I
- Move file/folder/namespace/another type/instance method: Ctrl+R, O
- List File Members: Alt+\
- Search Everything: Ctrl+T
- Extend Selection: Ctrl+W, Ctrl+W
- Shrink Selection: Ctrl+Shift+W, Ctrl+Shift+W
- Go to Previous Function: Alt+Up Arrow
- Go to Next Function: Alt+Down Arrow
- Go to Previous error/highlight/issue: Alt+PageUp
- Go to Next error/highlight/issue: Alt+PageDown
- Run All Test: Ctrl+U, L
- Run Last Test: Ctrl+U,U
- Reformat Code: Ctrl+Alt+Enter
- Clean Up: Ctrl+E, Ctrl+C
- Duplicate Code(selection/line/block): Ctrl+D
- Insert New Line:Shift+Enter
- Insert Surround Template: Ctrl+E,U
- Build Solution: Ctrl+Shift+B
- Start without Debug: Ctrl+F5
- Backward Navigate: Ctrl+-
2020年3月27日 星期五
[Resharper] 建立自己的Code Snippet
先簡短紀錄
1.先在cs空白處 key alt+enter
2.查詢Templates Explorer
3.進入後就可以參考既有新增
ref:https://www.jetbrains.com/resharper/features/code_templates.html
紀錄自己 :
[Test]
public void $Method$_$Scenario$_$ExpectedBehavior$()
{$END$}
1.先在cs空白處 key alt+enter
2.查詢Templates Explorer
3.進入後就可以參考既有新增
ref:https://www.jetbrains.com/resharper/features/code_templates.html
紀錄自己 :
[Test]
public void $Method$_$Scenario$_$ExpectedBehavior$()
{$END$}
2020年2月7日 星期五
[SQL] 新增大量資料 - SqlBulkCopy
最近在用一物一碼,所以會需要產生大批編號
如果使用一筆一筆insert的話, 100萬筆資料不知道要存到哪一天了
這時候建議還是直接用sql bulk insert
ex.
using (SqlConnection conn = new SqlConnection(oneGoodsCS))
{
conn.Open();
using (SqlBulkCopy copy = new SqlBulkCopy(conn))
{
copy.DestinationTableName = "DemoTable";
DataTable dt = new DataTable("DemoTable");
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("TraceCodeID", typeof(int));
#region sub
for (var i = 0; i < request.Count; i++)
{
var code = Guid.NewGuid().ToString().ToLower();
dt.Rows.Add(code, "traceCodeID");
}
copy.WriteToServer(dt);
#endregion
}
}
2020年1月31日 星期五
[C#] 非同步觀念紀錄
1.偏向處理IO bound(讀取記憶體/硬碟密集),但CPU Loading較低的工作,
如:讀文件、資料庫、網路要求資料(webservice)
2.是並行處理 concurrent, 與平行處理不同
3.一般建議任何方法(method)超過50ms才能完成,建議改非同步
4.4~5條thread就很夠處理一般程式(ex.賽車換輪胎範例)
5.非同步目的是提高執行效能與回應速度
6.thread safey : 多執行序環境下也可以確保得到預期結果
7.Critical Section: 任意一段程式碼,不允許多執行緒同時執行這段程式碼 ex.lock
8.Deadlock: 當兩個執行緒都嘗試鎖定另一個執行緒已經鎖定的資源時,就會發生死結,導致兩個執行緒都不能繼續執行
9.Context Switch: thread 記錄當下狀態,並換成其他thread(是會消耗成本)
10.非同步進程 : APM, EAP, TPL, TAP
11.blocking thread, 建議不用 .result wait waitall .thread join等會讓執行等待的方式, 改用WhenAll(tasks),await
12.不要混用同步與非同步方法
13.正常情況,不要使用 async void MethodAsync(){}, 改用回傳Task才能捕捉異常與執行結果
14.await Task.Delay 替代 Thread.Sleep
如:讀文件、資料庫、網路要求資料(webservice)
2.是並行處理 concurrent, 與平行處理不同
3.一般建議任何方法(method)超過50ms才能完成,建議改非同步
4.4~5條thread就很夠處理一般程式(ex.賽車換輪胎範例)
5.非同步目的是提高執行效能與回應速度
6.thread safey : 多執行序環境下也可以確保得到預期結果
7.Critical Section: 任意一段程式碼,不允許多執行緒同時執行這段程式碼 ex.lock
8.Deadlock: 當兩個執行緒都嘗試鎖定另一個執行緒已經鎖定的資源時,就會發生死結,導致兩個執行緒都不能繼續執行
9.Context Switch: thread 記錄當下狀態,並換成其他thread(是會消耗成本)
10.非同步進程 : APM, EAP, TPL, TAP
11.blocking thread, 建議不用 .result wait waitall .thread join等會讓執行等待的方式, 改用WhenAll(tasks),await
12.不要混用同步與非同步方法
13.正常情況,不要使用 async void MethodAsync(){}, 改用回傳Task才能捕捉異常與執行結果
14.await Task.Delay 替代 Thread.Sleep
2020年1月16日 星期四
[MVC] 自訂Authentication
複習一下 :
public class CustomAuthenticationFilter : IAuthenticationFilter
{
public void OnAuthentication(AuthenticationContext filterContext)
{
if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true))
{
return;
}
if (filterContext.Principal.Identity.IsAuthenticated && filterContext.Principal.Identity is FormsIdentity)
{
}
else
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
{
if (filterContext.Result == null || filterContext.Result is HttpUnauthorizedResult)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
{
{"controller","Default"},
{"action","Logon"},
{"returnUrl",filterContext.HttpContext.Request.RawUrl }
});
}
//or do something , add challenge to response
}
}
參考:https://dotblogs.com.tw/libtong/2017/10/03/105527
public class CustomAuthenticationFilter : IAuthenticationFilter
{
public void OnAuthentication(AuthenticationContext filterContext)
{
if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true))
{
return;
}
if (filterContext.Principal.Identity.IsAuthenticated && filterContext.Principal.Identity is FormsIdentity)
{
}
else
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
{
if (filterContext.Result == null || filterContext.Result is HttpUnauthorizedResult)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
{
{"controller","Default"},
{"action","Logon"},
{"returnUrl",filterContext.HttpContext.Request.RawUrl }
});
}
//or do something , add challenge to response
}
}
參考:https://dotblogs.com.tw/libtong/2017/10/03/105527
2020年1月12日 星期日
[SQL] 學習 IN和EXISTS用法的差別
引用:https://www.jianshu.com/p/f212527d76ff
引用 :https://read01.com/zh-tw/ggKA5P.html#.Xhq8usgkuUk
exist會針對子查詢的表使用索引.
not exist會對主子查詢都會使用索引.
in與子查詢一起使用的時候,只能針對主查詢使用索引.
not in則不會使用任何索引. 注意,一直以來認為exists比in效率高的說法是不準確的
紀錄一下
訂閱:
文章 (Atom)