C# 메모리 강제 회수

CSharp
GC.Collect()를 사용하였지만 정말 획기적으로 줄지 않아서 사용하게 되는것입니다. using System.Runtime.InteropServices; // [DllImportAttribute("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)] // private static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int maximumWorkingSetSize); /// <summary> /// 강제 메모리 회수 /// </summary> public static void FlushMemory() { GC.Collect(); GC.WaitForPendingFinalizers(); if (Environment.OSVersion.Platform == PlatformID.Win32NT) { SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1); } } 남발을 할 경우 사용상에도 문제가 있고 하니, 적절히 필요한 부분에서 사용을 해야 될듯 싶습니다. 저 같은 경우은 datagridview를 몇개를 사용하다 보니 도저히 메모리 관리가 되지 않아서 지워준 경우가 됩니다. datagridview를 사용해서 표현은 하지만 Row 마다 수정은 막혀 있기도 하고 풀어 놓기도 해서 입니다. 수정 권한이 있는 사용자에게는 단순히 data를 보여주기만 하면 되어서 큰 문제가 없어서 메모리를 관리를 하는 용도로 사용을 합니다.
Read More

VisualStudio C# Debug창에 출력하기

CSharp
using System.Diagnostics; static class Program { static void Main() { Debug.WriteLine("메세지 내용"); } } 항상 사용을 할 수 있다는것은 알지만 기억이 나지 않아서 간단히 정리합니다. 평소에는 그냥 평하게 Console 창에 이용하기 때문에 사용할 수 있지만, 속성을 변경해야 하는 불편함도 있고 하여서 기록을 합니다. 이곳에 기록을 해 놓아도 기록여부를 기억하지 않으면 나중에 또 기억이 나지 않겠지만 일단 기록 입니다.
Read More
Visual Studio Installer Project 사용하기

Visual Studio Installer Project 사용하기

CSharp
확장 > 확장관리 :: 검색어 "installer"를 입력하면 설치 할 수 있습니다. Installer프로젝트의 자세한 사용법은 검색을 통해서 알아 보시기 바라며, 제가 기록할 내용은 설치할 경로에 대한 정보 입니다. 제가 이 사진을 올린 이유는 속성창중에서 "Manufacturer" 이부분이 중요해서 입니다. 아래의 사진중에서 경로를 지정할수 있습니다. 하지만, 이 프로그램이 설치될 상위 디렉토리에 대해서 설정을 여기서 할 수 있습니다.보이시는 "Manufacturer" 의 값이 아래의 "Application Folder"의 이름이 되는것이라고 저는 보고 있습니다. 경로를 설정하실때 이름을 입력을 해 놓는것이 좋다는 생각입니다. 보통 새롭게 프로젝트를 만들고 "Application Folder" 속성에 "DefaultLocation" 정보가 보이게 됩니다. 이곳의 정보를 수정하면은 변경을 할수 있습니다. // [ProgramFilesFolder] :: 설치할 경로 // [Manufacturer] :: 필수 유지 위에서 설명함. // [ProductName] :: 설치할 폴더명(프로젝트 이름과 달리 할수 있음) [ProgramFilesFolder][Manufacturer]\[ProductName] 위에서 "[ProgramFilesFolder]" 이부분을 변경을 원합니다. 저는 C 드라이버에 사용되기를 원해서 "[WindowsVolume][Manufacturer]\MyPROGRAM"으로 변경해서 모두 설치를 하고 있습니다. 저 처름…
Read More

MySQL DB Schema 관리 프로그램

CSharp, 프로그램
MySQL DB Schema 에 대해서 DBTool을 이용하지 않고 보고 보고서를 Excel로 출력하기 위해서 만들었습니다. 분명히 좋은 프로그램도 많고 하지만 특정 사용인에 맞춰서 출력을 조절하고 DB Schema를 관리 하기 위해서 만들게 되었습니다. 컬럼마다 코멘트와 형식으로 모두 설정이 가능하도록 되어 있어서 여러사람이 이 프로그램을 사용하면은 볼수가 있습니다.
Read More

Local MSSQL 데이터를 MySQL Server로 전송

CSharp, 프로그램
요구사항1. 컴퓨터의 MSSQL 특정 DB table을 MySQL 서버로 전송2. 특정컬럼의 구분자를 구분해서 MySQL로 전송3. 컴퓨터의 MSSQL 데이터를 일정기간 지난후 삭제 하도록 처리4. 프로그램의 실행 시간을 일정시간 간격으로 실행하다록 처리 매번 프로그램을 만들어주는게 간단한것도 있지만 막상 작업을 하다 보면은 손이 많이 가야 하는것이 있습니다. 이번 프로그램도 보기에는 간단한데, 내부적으로 돌아가야 하는 부분은 신경써야 할 곳이 한두곳이 아닙니다. Web API를 만들어서 전송하면은 WebServer에서 담당하면 되지만, 이건 IP가 지정되어서 MySQL 서버가 열러 있어서 해당 프로그램에서 자체적으로 MSSQL, MySQL를 동시에 처리해서 귀찮은 부분이 많았습니다. 일단 일정시간마다 읽어서 모든 Data를 전송하지만, 중복이 되지 않도록 제가 가능한 부분에서 최대한 노력을 하였으며, 현재 한달가 가동현황에서 보면은 문제는 없어 보입니다. 아울러 MSSQL의 데이터를 일정 기간만 유지하도록 Query 문을 사입해서 지우기도 하지 사용하시는분이 이제 편하다는 입장이며 저도 기분이 좋고 사용하시는 분도 좋으니 모든게 잘 풀린 케이스 인듯 합니다.
Read More

Local SQLite의 Table의 내용을 WebServer로 전송

CSharp, 프로그램
필요사항1. 주기적으로 WebServer로 전송해야함.(단 WebServer에 중복은 방지)2. 각 컴퓨터마다 SQLite 경로가 다르기 때문에 설정이 가능하도록함.3. 각 컴퓨터 구분을 할 수 있도록 함.4. 각 컴퓨터에 일정시간적으로 DB를 읽을수 있도록함.5. 각 컴퓨터 SQLite DB가 Lock이 걸리니 복사해서 사용하도록함. 이상이 5가지 사항을 가지고 만든것이며, 약 일주일 정도 지났지만 문제없이 사용을 하고 있다고 합니다. 생각보다 적은 양의 코딩을 해서 만들었지만 알차게 만든듯 합니다.
Read More

Devexpress spilt panel 감추기

CSharp
// 패널 감추기 if (xtraTabControl1.SelectedTabPage == xtraTabPage1) { splitContainerControl2.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2; splitContainerControl2.SetPanelCollapsed(true); splitContainerControl2.Panel2.Visible = false; } else { splitContainerControl2.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2; splitContainerControl2.SetPanelCollapsed(false); splitContainerControl2.Panel2.Visible = true; }
Read More

FileWatch

CSharp
private void initWatcher() { string EqpDirPath = @"C:\TEST\"; FileSystemWatcher watcher = new FileSystemWatcher(); //1. FileSystemWatcher 생성자 호출 watcher.Path = EqpDirPath; //2. 감시할 폴더 설정(디렉토리) // 3. 감시할 항목들 설정 (파일 생성, 크기, 이름., 마지막 접근 변경등..) watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size | NotifyFilters.LastAccess | NotifyFilters.CreationTime | NotifyFilters.LastWrite; //감시할 파일 유형 선택 예) *.* 모든 파일 watcher.Filter = "*.*"; // watcher.IncludeSubdirectories = true; // 4. 감시할 이벤트 설정 (생성, 변경..) watcher.Created += new FileSystemEventHandler(Changed); watcher.Changed += new FileSystemEventHandler(Changed); watcher.Renamed += new RenamedEventHandler(Renamed); // 5. FIleSystemWatcher 감시 모니터링 활성화 watcher.EnableRaisingEvents = true; } // 6. 감시할 폴더 내부 변경시 event 호출 private void Changed(object source, FileSystemEventArgs e) { MessageBox.Show(e.FullPath); } private void Renamed(object source, RenamedEventArgs e) { MessageBox.Show(e.FullPath); }
Read More

[C#] [Build] 빌드시 EXE 에 DLL 포함 시키기

CSharp
VS에서 빌드시에 참조 리소스등 DLL등을 별도로 포함을 해야 하는데, 보기보다 이작업이 상당히 귀찮은 작업니다. 물론 인스톨러를 사용하면은 간단하지만 단일 파일로 배포를 할 경우에 여러가지 파일이 있으면 사람들이 싫어 하는 편입니다. 그래서 EXE파일을 빌드 할 경우에 리소소를 포함 시켜서 배포를 하면은 사용하는 사람도 편하고 배포 하는 사람도 편하다는 생각에 기록을 남깁니다. nuget에서 Costura.Fody를 검색하신후에 설치하시면 자동으로 빌드시에 DLL등이 EXE 파일에 포함되어 집니다. nuget에서 캡쳐함 이미지
Read More

[C#] WinForm 시스템 메뉴에 나만의 메뉴 추가하기

CSharp
using System; using System.Windows.Forms; using System.Runtime.InteropServices; namespace CaptionTimetableSupporet { public partial class MainForm : Form { // P/Invoke constants private const int WM_SYSCOMMAND = 0x112; private const int MF_STRING = 0x0; private const int MF_SEPARATOR = 0x800; // P/Invoke declarations [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool AppendMenu(IntPtr hMenu, int uFlags, int uIDNewItem, string lpNewItem); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool InsertMenu(IntPtr hMenu, int uPosition, int uFlags, int uIDNewItem, string lpNewItem); // ID for the About item on the system menu private int SYSMENU_ABOUT_ID = 0x1; protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); // Get a handle to a copy of this form's system (window) menu…
Read More

[C#] Environment 를 통해 시스템 정보, OS 버전알아오기

CSharp
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // 현재 작업 디렉터리의 정규화된 경로를 가져오거나 설정합니다. txtWindowCode.Text += "@ 디렉토리 경로 : " + Environment.CurrentDirectory + "\r\n"; // 프로세스의 종료 코드를 가져오거나 설정합니다. txtWindowCode.Text += "@ 프로세스종료코드 : " + Environment.ExitCode + "\r\n"; // 이 로컬 컴퓨터의 NetBIOS 이름을 가져옵니다. txtWindowCode.Text += "@ NetBIOS 이름 : " + Environment.MachineName + "\r\n"; // OSVersion txtWindowCode.Text += "@ OSVersion : " + Environment.OSVersion.ToString() + "\r\n"; // 시스템 디렉터리의 정규화된 경로를 가져옵니다. txtWindowCode.Text += "@ 시스템디렉토리 : " + Environment.SystemDirectory + "\r\n"; // 시스템 시작 이후 경과 시간(밀리초)을 가져옵니다. txtWindowCode.Text +=…
Read More

[C#] 윈도우 OS 정보 얻기

CSharp
OperatingSystem os = System.Environment.OSVersion; Console.WriteLine("플랫폼 : " + os.Platform); Console.WriteLine("서비스팩 : " + os.ServicePack); Console.WriteLine("버전 : " + os.Version); Console.WriteLine("버전 : " + os.Version); Console.WriteLine("버전 문자열 : " + os.VersionString); Console.WriteLine("CLR버전 : " + System.Environment.Version); Console.ReadLine(); // 콘솔에서 확인할수 있도록 잠시 멈춤 사용자의 정보를 획득해야 될 일이 있을 경우에 위 기능을 사용해서 처리 할 수 있습니다.
Read More