イントレ
  • 新規
  • ペイント
  • 一覧
  • 管理
  • Home
  • ダウンロード
  • 日記
  • イラスト
  • リンク
  • About
  •  RSS

本文へジャンプ


イントレ。

Tag for "SQLite"

«Prev || 1 · | Next»

VS2010RC一般公開。

Visual Studio 2010 and .NET Framework 4 Release Candidate

ということで英語版が公開されました。
今のところ日本語版の提供予定はないそうです。残念。

最終リリースを延期してまで改善してきたメモリ使用量とパフォーマンスですが、すこぶる良好。
メモリ使用量はそれほど気にはしていなかったのでわかりませんが・・・。
それでも、VS2008と比べると重たいと感じる部分はありますが十分我慢できる範囲です。
これ以上求めるなら、まずはPCスペックを上げないと・・・。

.NET Frameworkの起動速度もかなりマシになっています。
WPFアプリケーションは・・・簡単な計測の結果は初期化に関わる部分(InitializeComponent)の速度が落ちていました。
それでも.NET自体の起動高速化もあってコールドブートでは.NET3.5よりは確実に早いです。

今回のリリースからGo-Liveライセンスが付与されるので、.NET4向けアプリケーションを本格始動させるのもありですね。
今までと違って内部クラスにもかなり手が入っているみたいですし、ClientProfileもかなり使い物になるはず。
System.DataがClientProfileに入ったのでSystem.Data.SQLiteもClientProfileで配布出来ますね。


 そういえば、.NET4のMixedMode(混在モード)DLLが読めない件。の記事で載せてたXMLが大文字小文字の違いで無効になってた。
具体的にはuselegacyv2runtimeactivationpolicy → useLegacyV2RuntimeActivationPolicy 。

コードハイライター使わないと大丈夫なのかな?
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedruntime version="v4.0" />
    </startup>
</configuration>

しっかし、VS2010でMeiryoKe_Consoleが使えなくなったのはチト辛いなぁ。


SQLiteのユーザー定義関数。

ユーザー定義関数がかなり有用な予感。
SQL文のRandom()とかSum()とかCount()みたいなのを独自に定義出来る。
System.Data.SQLiteを使うと、ユーザー関数をC#側からも定義出きます。

基本的には以下の流れ。
・SQLiteFunctionを継承したクラスを作成し
・SQLiteFunction属性をつける
・SQLiteFunction.RegisterFunction()で登録

呼ぶときはSQL文に普通に記述すればいい。
たとえば、「SELECT * FROM test ORDER BY value COLLATE NETFX_COLLATE」みたいな。


まずはCollation。
ORDER BY ~ COLLATEに使う文字の比較を定義出きます。
オーバーライドするのはCompare()だけでいいみたい。

[SQLiteFunction(Name="NETFX_COLLATE", FuncType=FunctionType.Collation)]
class NETFX_COLLATE : SQLiteFunction
{
public override int Compare(string param1, string param2)
{
return StringComparer.CurrentCulture.Compare(param1, param2);
}
}

Exolorerの文字ソートみたいに数字を考慮するならStrCmpLogicalW()を使ってこんなことも。

[SQLiteFunction(Name="Logical_COLLATE", FuncType=FunctionType.Collation)]
class Logical_COLLATE : SQLiteFunction
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern int StrCmpLogicalW(string str1, string str2);
public override int Compare(string param1, string param2)
{
return StrCmpLogicalW(param1, param2);
}
}


次、Scaler。
Random()とかLower()とかみたいなやつ。
Argumentsには要求する引数の数。-1で可変数にも出来るみたい。
オーバーライドするのはInvoke()メソッド。

[SQLiteFunction(Name="NETFX_RANDOM", FuncType=FunctionType.Scalar, Arguments=0)]
class NETFX_RANDOM : SQLiteFunction
{
readonly static Random rand = new Random();
public override object Invoke(object[] args)
{
return rand.Next();
}
}


最後にAggregate。
Sum()とかCount()みたいに、結果を捜査して出力を返すタイプのもの。
Step()でコンテキストインスタンスを渡して値を保持しておきます。
Step()が必要回数呼ばれて、最後にFinal()が呼ばれます。

[SQLiteFunction(Name = "NETFX_Sum", FuncType = FunctionType.Aggregate, Arguments = 1)]
class NETFX_Sum : SQLiteFunction
{
class Context
{
public decimal Value = 0;
}

public override void Step(object[] args, int stepNumber, ref object contextData)
{
var data = (contextData as Context) ?? (Context)(contextData = new Context());
data.Value += Convert.ToDecimal(args[0]);
}

public override object Final(object contextData)
{
var data = contextData as Context;
return (data == null) ? null : (object)data.Value;
}
}

あーしかしやばいなー。
これは便利すぎる。

«Prev || 1 · | Next»

HTML creation time [0.37sec.]
"intre." by MinagiSyu, sense 1999.11.23.
Powered by Nucleus CMS v3.41

Utilities

タグ
サッカー | WPF | 園芸 | C# | ツクールもどき | SAP1x | .NET | Windows 7 | PCパーツ | SAPFx | ...すべてのタグ
カレンダー
<   2010-07   >
日月火水木金土
    123
45678910
11121314151617
18192021222324
25262728293031
最近の更新
    2010-07-11
  • [日記] WebMatrixが本気過ぎる件。
  • 2010-06-23
  • [日記] Google Reader APIの認証がまた変わった?
  • [更新履歴] Google Reader Notifier 改 r3をリリース。
  • [ダウンロード] Google Reader Notifier 改
  • 2010-05-31
  • [日記] DynamicObjectを使ったINotifyPropertyChangedラッパー。
  • 2010-05-28
  • [日記] タブが非アクティブな時にページを書き換えるフィッシング攻撃。
  • 2010-05-24
  • [日記] Mercurialのsubrepo。
Adsense