2013年2月14日木曜日

System.Runtime.InteropServices.ExternalException: 要求されたクリップボード操作に成功しませんでした。

System.Runtime.InteropServices.ExternalException: 要求されたクリップボード操作に成功しませんでした。
が発生する。

対応

//Clipboard.SetDataObject(post, true);
//たまにエラーが発生するので、リトライを組み込み対応
Clipboard.SetDataObject(post, true, 10, 100);

エラー詳細
---------------------------
System.Runtime.InteropServices.ExternalException: 要求されたクリップボード操作に成功しませんでした。

   場所 System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)

   場所 System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay)

   場所 System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy)

   場所 SendToClipBord.MainApplicatoin.Main(String[] args) 場所 D:\kiyo\Windows\Deveropment\SendToClipBoard\MainApplication.cs:行 159
---------------------------
OK   
---------------------------

Windows8でファイルサーバに接続できなくなる問題

Windows8からドメインやワークグループにアクセスできない場合は、下記の設定を実施してください。

操作
 1. [ コントロールパネル ] → [ クラシック表示 ] → [ 管理ツール ] をクリック
 2. [ ローカルポリシー ] → [ セキュリティオプション ] をクリックする。
 3. 「ネットワークセキュリティ:LAN Manager認証レベル」 の「NTMv2応答のみを送信する」が
   デフォルトになって いるのが原因でワークグループにアクセスすると
   ユーザ名とパスワード入力が出てアクセスできない。

   LMとNTLM応答を送信する に変更することでアクセスが可能になります。

2013年2月6日水曜日

ioDriveの進め

最近のサーバチューニングでPCIe直結の高速ドライブを用いたハードウェアチューニングに凝っています。

費用対効果が優れているから、今年からは、サーバの世界では、一般化したソリューションだという認識です。

SQL Serverも

http://www.microsoft.com/ja-jp/sqlserver/2012/ssd-appliance/default.aspx

MySQLも

↓このシリーズ

RDBMSだと処理の内容やタイミングにもよるのですが、性能がよくなります。
(DBとのやり取りが多いヘボい構造だったり、クエリの作りの問題など多種多様な問題の場合もあったり、キャッシュの活用度合いにもよるので、一概には言えないのですが、概ね良い結果をもたらします。)

あと、多数のVM数を動作せるホストOSには必須かなと思っています。
(感覚、実用性に耐えれるVM数が、10から200くらいへ増えます。)

借りれるサーバ

Parallelのコードを書くときの注意点

マルチコアを活かそうとして、Parallelのコードを書くかと思いますが、自処理の外の変数を使用するときは、lockステートメントを使用して排他制御をしましょう。
下記のようなコードは、aの値が、必ずしも0とはならない。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int a = 0;
List<string> l = new List<string>();

for (int i = 0; i < 10000; i++)
{
l.Add("" + i);
}

Parallel.ForEach(l, s =>
{
a = a + int.Parse(s);
Console.WriteLine(s);

a = a - int.Parse(s);

});

Console.WriteLine("a=" + a);
Console.ReadLine();
}
}
}


a = a + int.Parse(s);
lock(l) a = a + int.Parse(s);
となります。