Files
ntpa/MySql/Samples/Profiling/cs/Form1.cs
T
2016-03-16 20:08:36 +01:00

159 lines
5.2 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.Common;
using MySql.Data.MySqlClient;
using System.Diagnostics;
namespace Profiling
{
public partial class Form1 : Form
{
MySqlConnection connection;
public Form1()
{
InitializeComponent();
}
private void Log(string s)
{
output.Text += "\r\n" + s;
output.Refresh();
}
private void testBtn_Click(object sender, EventArgs e)
{
output.Clear();
DateTime start = DateTime.Now;
Log("Starting tests at " + start.ToString());
try
{
if (sockets.Checked)
{
Log("\r\nTesting sockets");
TestSockets();
}
if (useNamedPipes.Checked)
{
Log("\r\nTesting named pipes");
TestNamedPipes();
}
if (useSharedMem.Checked)
{
Log("\r\nTesting shared memory");
TestSharedMemory();
}
Log("Done!");
}
catch (Exception ex)
{
Log(ex.Message);
}
TimeSpan ts = DateTime.Now.Subtract(start);
Log(ts.ToString());
}
private void TestSockets()
{
Test(String.Format(
"server={0};uid={1};password={2};database={3};port={4}",
server.Text, userid.Text, password.Text, database.Text, portNum.Text));
}
private void TestNamedPipes()
{
Test(String.Format(
"server={0};uid={1};password={2};database={3};protocol=pipe;pipe={4}",
server.Text, userid.Text, password.Text, database.Text, pipeName.Text));
}
private void TestSharedMemory()
{
Test(String.Format(
"server={0};uid={1};password={2};database={3};protocol=memory;shared memory name={4}",
server.Text, userid.Text, password.Text, database.Text, memName.Text));
}
private void Test(string connectionString)
{
string[] desc = new string[4] { "no compression, no pooling",
"no compression, pooling", "compression, no pooling", "compression, pooling" };
string[] addons = new string[4] { ";compress=false;pooling=false",
";compress=false;pooling=true", ";compress=true;pooling=false",
";compress=true;pooling=true"};
for (int x=0; x < addons.Length; x++)
{
if (connection != null)
connection.Close();
Log("\r\nTest " + desc[x]);
connection = new MySqlConnection(connectionString + addons[x]);
connection.Open();
Log("\r\nnot using prepared tests");
DoInsertTests(false);
DoSelectTests(false);
Log("\r\nusing prepared tests");
DoInsertTests(true);
DoSelectTests(true);
}
}
private void DoInsertTests(bool prepared)
{
Log("Starting Insert tests");
MySqlCommand cmd = new MySqlCommand("DROP TABLE IF EXISTS test", connection);
cmd.ExecuteNonQuery();
cmd.CommandText = "CREATE TABLE test (id INT, name VARCHAR(50), fl FLOAT, dt DATETIME)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO test VALUES (?id, ?name, ?f1, ?dt)";
cmd.Parameters.Add("?id", MySqlDbType.Int32);
cmd.Parameters.Add("?name", MySqlDbType.VarChar);
cmd.Parameters.Add("?f1", MySqlDbType.Float);
cmd.Parameters.Add("?dt", MySqlDbType.Datetime);
if (prepared)
cmd.Prepare();
for (int x=0; x < 500; x++)
{
cmd.Parameters[0].Value = x;
cmd.Parameters[1].Value = "Test";
cmd.Parameters[2].Value = 0.0;
cmd.Parameters[3].Value = DateTime.Now;
cmd.ExecuteNonQuery();
}
}
private void DoSelectTests(bool prepared)
{
Log("Starting select tests");
MySqlCommand cmd = new MySqlCommand("SELECT * FROM test", connection);
cmd.CommandTimeout = 0;
using (MySqlDataReader reader = cmd.ExecuteReader())
{
int count = 0;
while (reader.Read())
{
int id = reader.GetInt32(0);
Trace.WriteLine("id = " + id);
string name = reader.GetString(1);
float fl = reader.GetFloat(2);
DateTime dt = reader.GetDateTime(3);
count++;
}
Log("read " + count + " records");
}
}
}
}