.net miner

something about life, me and .net
  • Home
  • Categories
    • C#
    • .Net
    • Tools
    • General
    • Visual Studio
    • Open Source Projects
  • Contact Me
.Net•C#•General•Open Source Projects

Invoke Type Members By Using Dynamic Methods

23 November 2018 by Ozcan Degirmenci No Comments

In one of my previously published article (very old 🙂 one), I mentioned briefly about reflection, and discuss how reflection is an important concept in .Net Framework. While it is a very important concept there is a performance issue related with the Reflection. If you over use reflection codes in your projects you have to face with performance issues compared with the code that is implemented in this sample project.

In that context, I have explained two methods to have a better performance when manipulating objects dynamically and I have shared code examples about them. As a summary, I created a ObjectCreateMethod class which uses DynamicMethods and creates an IL which calls type constructors. By calling that generated DynamicMethod we can create instance of types faster than traditional reflection. If you are interested in and need more information, you can access article from here.

After reviewing previous article, now you are ready to get more information about the usage of the DynamicMethods that improve the performance of traditional reflection which is the subject of this article.

In the previous article, maybe you have discerned an imperfection. The ObjectCreateMetod class – which uses DynamicMethods for creating instance of a type – is only suitable for creating instance of types which has parameter-less constructors.

While I was surfing the web, I found a feedback about my article. Someone asks if it is possible to use ObjectCreateMethod class with types which has parameterized constructors. Because of this, I decided to updated my code, and now it also supports the constructors with parameter(s).

To resolve this issue I created a dynamic method which takes object[] argument as the constructor arguments. Than I take these parameters on to the stack and call new opcode. Here is the code;

/// <summary>
///  Creates the dynamic proxy method which calls given <see cref="ConstructorInfo"/>
/// </summary>
/// <param name="methodInfo"></param>
private static DynamicMethodDelegate CreateProxyMethod(ConstructorInfo constructor)
{
    var method = new DynamicMethod(constructor.DeclaringType.Name + "_ctor_Proxy",
        typeof(object),
        new Type[] { typeof(object[]) },
        constructor.DeclaringType);

    var wrapper = new ILGeneratorWrapper(method.GetILGenerator());

    var parameters = constructor.GetParameters();
    var parameterTypes = new Type[parameters.Length + 1];
    parameterTypes[0] = constructor.DeclaringType;
    for (int i = 0; i < parameters.Length; i++)
    {
        parameterTypes[i + 1] = parameters[i].ParameterType;
    }

    wrapper.DeclareLocals(parameterTypes);

    for (int i = 1; i < parameterTypes.Length; i++)
    {
        wrapper.EmitLoadArg(0);
        wrapper.EmitLoadCons(i - 1);
        wrapper.Emit(OpCodes.Ldelem_Ref);
        wrapper.EmitCast(parameterTypes[i]);
        wrapper.EmitStoreLocal(i);
    }

    for (int i = 1; i < parameterTypes.Length; i++)
    {
        wrapper.EmitLoadLoc(i);
    }

    wrapper.Emit_NewObj(constructor);

    wrapper.EmitStoreLocal(0);
    wrapper.EmitLoadLoc(0);
    wrapper.Emit(OpCodes.Ret);

    return method.CreateDelegate(typeof(DynamicMethodDelegate)) as DynamicMethodDelegate;
}

I also added some other helper proxy classes which provides invoking other type members (fields, properties and methods) by using DynamicMethods too.

Continue reading
Share:
Reading time: 3 min
.Net•C#•General•Open Source Projects•Tools

Searchable RichTextBox Control

9 November 2018 by Ozcan Degirmenci No Comments

RichTextBox is a control which provides formatting features that TextBox control does not provide. For instance, you can customize the text’s color, style and/or size. So, you can apply formatting to a word, a line or all of the paragraph. RichTextBox is useful if you want to have more control over styling, but although it supports search in its content by the “Find” functionality, it does not have a search UI, so this reduces control’s user-friendly design. If you need to search something in RichTextBox you should add new code blocks, functions, UI controls.

With the following code blocks, we derived a searchable RichTextBox control from RichTextBox which provides search(Find) functionality with a “Find” pop-up. Searchable RichTextBox does not assist any UI customization nevertheless it allows using ‘Control + F’ function in the text content. For more, review the following blocks.

Searchable RichTextBox Control Interface Image

An example screenshot of the Searchable RichTextBox Control

You can get full source code from my git-hup page. Here is the link.

Share:
Reading time: 1 min
.Net•C#•General•Open Source Projects•Tools

Process Viewer

6 September 2008 by Ozcan Degirmenci No Comments

Download Source Code From GitHub | Watch Sample Movie(v1.0.5.0)

 What is Process Viewer?

I can say that Process Viewer is a program like Microsoft Spy++. Unlikely to Spy++ it allows you to edit some properties of the Controls and also allows you to manage its window messages. You can change Text, Visibility, Enabled, Window Styles and Window Ex Styles properties of a control by using PV during run time. There withal you can ignore window messages, change incoming message to a different message or edit parameters of any window messages by putting breakpoints to the control’s window procedure with PV.

Process Viewer Interface Image

An example screenshot of the Process Viewer

Continue reading
Share:
Reading time: 17 min
.Net•Open Source Projects

B-Msn

1 February 2008 by Ozcan Degirmenci No Comments

Download Source Code From GitHub

Tonight i uploaded an example about Server-Client applications to the server. The name of the example is B-MSN which is an instant messaging program like MSN, AOL or Yahoo IM.

Some of the specifications of the B-MSN are;

Supports Smileys
Supports personal image
NetServer and NetClient components which you can also use them as standalone
Flashes window when a new message received
Supports RTF text sending
Informs you while the person whom you chat with is writing a message to you
Supports Saving Message Histories  

Continue reading
Share:
Reading time: 1 min

Search

Projects

  • Process Viewer
  • B-Msn
  • Runtime Member Proxies
  • Searchable RichTextBox

Categories

  • .Net (19)
  • C# (12)
  • General (13)
  • Open Source Projects (4)
  • Quantum (1)
  • Tools (9)
  • Visual Studio (6)

Archives

  • November 2018
  • September 2018
  • September 2010
  • August 2010
  • August 2009
  • September 2008
  • August 2008
  • June 2008
  • May 2008
  • April 2008
  • February 2008
  • January 2008

About me

Hi, my name is Ozcan Degirmenci. I'm co-founder and CEO at Crs Soft.

Tags

Assembly Collection Editor Dialog Support Dynamic method enum Flag Editor Loader Exceptions Ole Calls Open source project open source projects Perfornance Comparison process viewer Proxy quantum Reflection Run Apps From Web schrödinger's cat Searchable Richtextbox Spoon thought experiment thread

© 2018 copyright ÖZCAN DEĞİRMENCİ // All rights reserved.