C# Reshaperについて
ReShaperについて
JetBrains社がだしているコーディングの生産効率を向上させるツール紹介。
試用版もあるので試す価値あり。購入して使用していますが、使いやすい♪
※2ヶ月間無料で使用する可能です。
使用感
・コードのエラーや問題をオンザフライでハイライトしてくれて便利
・検索がしやすい
・リファクタリングがしやすい
かゆいところに手が届く
海外サイト
ReSharper: Visual Studio Extension for .NET Developers by JetBrains
日本語サイト
C# C#ソースをVBソースに変換
telerik社からC#ソース変換のサイトを紹介
C# VisualStudioのダウンロード
VisualStudio 2005
Visual Studio 2005 評価版
http://www.microsoft.com/japan/msdn/vstudio/2005/trial/default.aspx
Visual Studio 2005 Team Suite 評価版 (日本語版)
http://download.microsoft.com/download/7/6/0/76066F72-013F-4F3C-A47F-BFC7EA897554/jpn_vs_2005_VSTS_180_Trial.img
Visual Studio 2005 Professional Edition 評価版 (日本語版)
http://download.microsoft.com/download/A/1/1/A11D789B-E29F-499B-BCC1-1D149B0B27BE/jpn_vs_2005_Pro_90_Trial.img
Visual Studio 2005 Express Edition
http://web.archive.org/web/20080410092136/http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/
Visual Web Developer 2005 Express Edition 日本語版 586,284 KB 0xDF626AA6
http://download.microsoft.com/download/C/E/6/CE6B9F63-0E29-4560-A262-5EE8BCDB1E33/vwd.iso
Visual Basic 2005 Express Edition 日本語版 578,722 KB 0x6EE067F9
http://download.microsoft.com/download/A/B/4/AB4DA3D7-CC3A-4081-9FC8-E35653E85499/vb.iso
Visual C# 2005 Express Edition 日本語版 575,234 KB 0xCE838830
http://download.microsoft.com/download/9/5/7/9576E49E-1EDA-486B-9543-E0B0A5ABBF16/vcs.iso
Visual C++ 2005 Express Edition 日本語版 611,540 KB 0xB3AD1A2F
http://download.microsoft.com/download/8/E/8/8E85D539-2255-4CFD-AA97-440AE6C6F44A/vc.iso
VisualStudio 2008
Visual Studio Team System 2008 Team Suite (90 日間評価版)
http://download.microsoft.com/download/a/5/d/a5d4f8a7-8a7a-4acf-b55a-58f9588517/VS2008TeamSuite90DayTrialJPNX1429236.part1.exe
http://download.microsoft.com/download/a/5/d/a5d4f8a7-8a7a-4acf-b55a-4258f9588517/VS2008TeamSuite90DayTrialJPNX1429236.part2.rar
http://download.microsoft.com/download/a/5/d/a5d4f8a7-8a7a-4acf-b55a-4258f9588517/VS2008TeamSuite90DayTrialJPNX1429236.part3.rar
http://download.microsoft.com/download/a/5/d/a5d4f8a7-8a7a-4acf-b55a-4258f9588517/VS2008TeamSuite90DayTrialJPNX1429236.part4.rar
http://download.microsoft.com/download/a/5/d/a5d4f8a7-8a7a-4acf-b55a-4258f9588517/VS2008TeamSuite90DayTrialJPNX1429236.part5.rar
http://download.microsoft.com/download/a/5/d/a5d4f8a7-8a7a-4acf-b55a-4258f9588517/VS2008TeamSuite90DayTrialJPNX1429236.part6.rar
http://download.microsoft.com/download/a/5/d/a5d4f8a7-8a7a-4acf-b55a-4258f9588517/VS2008TeamSuite90DayTrialJPNX1429236.part7.rar
Visual Studio 2008 Professional Edition (90 日間評価版)
http://download.microsoft.com/download/1/4/2/142ddd0b-993b-42ef-8041-edfa2bb736f5/VS2008ProEdition90dayTrialJPNX1435988.iso
Visual Studio 2008 Express Edition
http://download.microsoft.com/download/f/a/6/fa693f60-97d1-44eb-ac7f-6a44ac42b10e/VS2008ExpressJPNX1428694.iso
Visual Studio 2008 Express Edition SP1
http://download.microsoft.com/download/6/f/1/6f161d1a-e893-4bfa-a53a-af6b0d56a55d/VS2008ExpressWithSP1JPNX1504866.iso
VisualStudio 2010
Microsoft Visual Studio 2010 Ultimate 試用版
http://download.microsoft.com/download/9/0/3/903103D7-976D-40E7-A391-B0901330D790/VS2010UltimTrialJPN_4PartsTotal.part1.exe
http://download.microsoft.com/download/9/0/3/903103D7-976D-40E7-A391-B0901330D790/VS2010UltimTrialJPN_4PartsTotal.part2.rar
http://download.microsoft.com/download/9/0/3/903103D7-976D-40E7-A391-B0901330D790/VS2010UltimTrialJPN_4PartsTotal.part3.rar
http://download.microsoft.com/download/9/0/3/903103D7-976D-40E7-A391-B0901330D790/VS2010UltimTrialJPN_4PartsTotal.part4.rar
Microsoft Visual Studio 2010 Professional 試用版
http://download.microsoft.com/download/6/6/C/66C3A4E9-59BC-4410-B453-E2008EC2D3CE/VS2010ProTrialJPN_4PartsTotal.part1.exe
http://download.microsoft.com/download/6/6/C/66C3A4E9-59BC-4410-B453-E2008EC2D3CE/VS2010ProTrialJPN_4PartsTotal.part2.rar
http://download.microsoft.com/download/6/6/C/66C3A4E9-59BC-4410-B453-E2008EC2D3CE/VS2010ProTrialJPN_4PartsTotal.part3.rar
http://download.microsoft.com/download/6/6/C/66C3A4E9-59BC-4410-B453-E2008EC2D3CE/VS2010ProTrialJPN_4PartsTotal.part4.rar
Visual Studio 2010 Express
http://download.microsoft.com/download/4/e/6/4e61e454-1de7-4b70-860b-13282de65d6b/VS2010ExpressJPN.iso
VisualStudio 2012
Visual Studio Ultimate 2012 日本語版 90日試用版
http://download.microsoft.com/download/8/A/5/8A5FC9B0-1328-47B7-A2BD-03B3C9595F91/VS2012_ULT_jpn.iso
Visual Studio Premium 2012 日本語版 90日試用版
http://download.microsoft.com/download/F/F/D/FFDA9418-4CB9-4744-9157-AC0B65EA7E64/VS2012_PREM_jpn.iso
Visual Studio Professional 2012 日本語版 90日試用版
http://download.microsoft.com/download/4/7/5/475E87C2-E0B9-4800-BB79-EDD61B09F4A9/VS2012_PRO_jpn.iso
Visual Studio Test Professional 2012 日本語版 90日試用版
http://download.microsoft.com/download/E/4/D/E4D97711-BB42-4C88-AB35-6CE2A20B203A/VS2012_TESTPRO_jpn.iso
Microsoft Visual Studio Express 2012 for Web
http://download.microsoft.com/download/7/E/E/7EE8655E-85F2-493A-BFFC-B55A4DE3B432/VS2012_WebExp_jpn.iso
Microsoft Visual Studio Express 2012 for Windows 8
http://download.microsoft.com/download/8/A/F/8AF985D6-25BE-454E-BF2C-9A4BABD4B938/VS2012_WINEXP_jpn.ISO
Microsoft Visual Studio Team Foundation Server Express 2012
http://download.microsoft.com/download/4/0/E/40E83F38-6096-4441-BF31-0031965323C1/VS2012_TFS_EXP_jpn.iso
C# シリアライズとでシリアライズ
オブジェクトのディープコピーに用いたりする。
シリアライズ
/// <summary> /// シリアライズを行います。 /// <typeparam name="T">オブジェクトのタイプ </typeparam> /// <param name="filePath">ファイルパス</param> /// <returns> /// 対象ファイルから復元したデータ /// </returns> public static void Serializea<T>(string filePath, T source) { bool isSuccess = false; try { XmlSerializer serializer = new XmlSerializer(source.GetTpype()); using (StreamWriter sw = new StreamWriter(filePath)) { Serializer.Serialize(sw, source); } isSuccess = true; } catch (Exception ex) { // エラー処理 } return isSuccess ; }
デシリアライズ
/// <summary> /// デシリアライズを行います。 /// </summary> /// <typeparam name="T">オブジェクトのタイプ </typeparam> /// <param name="filePath">ファイルパス</param> /// <returns> /// 対象ファイルから復元したデータ /// </returns> public static bool T Deserialize<T>(string filePath,ref T source) { bool isSuccess = false; try { XmlSerializer serializer = new XmlSerializer(source.GetTpype()); using (StreamReader sr = new StreamReader(filePath)) { source = (T)Serializer.Deserialize(sr); } isSuccess = true; } catch (Exception ex) { // エラー処理 } return isSuccess ; }
シリアライズ対象のオブジェクト
属性を付与してシリアライズできるようにする。
[System.Xml.Serialization.XmlRootAttribute("Company")] public class Company { [System.Xml.Serialization.XmlAttributeAttribute("CompanyName")] public String CompanyName = String.Empty; [System.Xml.Serialization.XmlElementAttribute("Customer")] public List<Customer> Customers = null; public class Customer { [System.Xml.Serialization.XmlElementAttribute("Name")] public String Name = String.Empty; [System.Xml.Serialization.XmlElementAttribute("Job")] public String Job = String.Empty; } } [XmlRootAttribute("ActionUISetup")] public class ActionUISetup { [XmlArrayAttribute("menulists")] [XmlArrayItemAttribute("menulist")] public MenuListSetup[] MenuLists; } public class MenuListSetup { [XmlAttribute("name")] public string Name; [XmlArrayAttribute("items")] [XmlArrayItemAttribute("item")] public MenuItemSetup[] Items; } public class MenuItemSetup { [XmlElementAttribute("text")] public string Text; [XmlElementAttribute("action")] public string Action; }
C# APサーバの負荷分散
負荷分散について
複数人が同時にサーバーへアクセスしたい際に、サーバへの負荷がかかるため、ロードバランサを用意して、複数台のサーバを設置して負荷を下げる。
現状 :サーバ1台
負荷軽減:サーバ複数台、ロードバランサ
問題点
クライアントから要求があり、サーバで保持していた一時的なファイルへのアクセスができなくなる可能性がある。
※必ずしも指定のAPサーバにアクセスできるとは限らないため。
対応方法として
対応策として、
一時的なファイルへのアクセスはサーバーでリダイレクトによってアクセスする。
※サーバー1⇒サーバ2の一時ファイルを取得する
ファイル共有サーバーを設置して、一時ファイルは格納するようにする。
ファイルサーバーを設置した場合
一番簡単な方法は、シンボリックリンクを使用することで簡単に解決することができる。
1.管理者権限の「コマンドプロンプト」を実行する。
2.シンボリックリンクを設定する
mklink /d C:\Web\hoge\downloads \\192.168.1.XXX\downloads
シンボリックリンク
シンボリックリンクとは特定のファイルやディレクトリを、それらを指名するファイルを作成してOSの別の場所から参照することのできる仕組みのことです。
SQLServer TempDbのラッチ状況
TempDBについて
SQLサーバーでTempDbを使用すると、サイズが足りない場合に自動的に拡張します。
その際に、ラッチ(オブジェクトの保護)が発生して、他の処理が待機状態になる可能性があります。
ラッチは、SQLサーバーの利用モニタで確認できます。
ラッチ状況の確認SQL
SELECT CASE WHEN [wait_type] LIKE N'LATCH%' THEN N'Non_Buffer_Latch' WHEN [wait_type] LIKE N'PAGELATCH%' THEN N'Buffer_Latch' WHEN [wait_type] LIKE N'PAGEIOLATCH%' THEN N'Buffer_Latch' END AS [type] ,* FROM sys.dm_os_wait_stats WHERE [wait_type] LIKE N'LATCH%' OR [wait_type] LIKE N'PAGELATCH%' OR [wait_type] LIKE N'PAGEIOLATCH%'
C# SQLServerでBulkCopyして高速化
大量のデータをInsertする場合、SQLサーバとの通信がSQLの実行のたびに時間がかかってしまう。
1万件のデータをInsert
- Insertを1件毎に実行:98.32秒
- Insertを1000件毎に実行:15.34秒
- Bulkを使って1000件たまったら実行:0.57秒
BulkCopyを使用すると、速度改善
データテーブルをそのままInsertすることで20倍以上の速度改善が見込まれる。
SqlBulkCopy Class (System.Data.SqlClient) | Microsoft Docs
C# bulkcopy to SQL Server - Stack Overflow
では、1万件をUpdateしたい場合はどうするか?
2通り
・すべて同一の値で更新する場合は、Update分1回で実行
・BulkCopy
前者は詳細省く。
BulkCopyでUpdate
Tempテーブルにデータを一時的にInsertして、ストアド一括更新(フェッチで回す)
2回SQLが実行される。
通信のコストが安くなり、効率化。
Tempテーブルの種類
・ローカル一時テーブル:トランザクション内で有効なテーブル(#テーブル名)
・グローバル一時テーブル:すべてのユーザで使用できるテーブル(##テーブル名)
※一時テーブルを参照するすべてのユーザーのセッションが切断されると削除されます。
今回使用するのは、ローカル一時テーブル。
CREATE TABLE #TempTable( COL1 varchar(10) ,COL2 varchar(10) )
※Tempテーブルを使用する際は、SQLサーバのTempDbの容量の設計が必要です。
最大サイズを超えると容量が自動的に拡張されるため、ラッチが発生します。
https://technet.microsoft.com/ja-jp/library/ms175527(v=sql.105).aspx
BulkCopyのコード
トランザクション内でTempテーブルを作成して、データを挿入する。
※トランザクションを抜けるとTempテーブルは削除されます。
DataTable dt = new DataTable("Employees"); dt.Columns.Add("Name"); dt.Columns.Add("LastName"); foreach (var employee in context.Employees.AsEnumerable()) { dt.Rows.Add(employee.Name, employee.LastName); } Console.WriteLine(dt.Rows[0]["Name"]); Console.WriteLine("Loading data into SQL"); using (SqlConnection conn = new SqlConnection("user id=<ID>;" + "password=<Password>;server=<Server>;" + "Trusted_Connection=yes;" + "database=<DB>; " + "connection timeout=30")) { using (SqlCommand command = new SqlCommand("", conn)) { try { conn.Open(); // Creating temp table on database command.CommandText = "CREATE TABLE #TmpTable(...)"; command.ExecuteNonQuery(); // Bulk insert into temp table using (SqlBulkCopy bulkcopy = new SqlBulkCopy(conn)) { bulkcopy.BulkCopyTimeout = 660; bulkcopy.DestinationTableName = "#TmpTable"; bulkcopy.WriteToServer(dt); bulkcopy.Close(); } } catch (Exception ex) { Console.WriteLine("Bulk load to SQL failed");// Handle exception properly } finally { conn.Close(); Console.WriteLine("table loaded into SQL"); } } }