记录的预期开销应该是多少?我试过这个例子
private class Person
{
private static Logger logger = LogManager.GetCurrentClassLogger();
public string Name { get; private set; }
public Person(string name)
{
Name = name;
logger.Info("New person created with name {0}", name);
}
}
List<Person> people = new List<Person>();
for (int i = 0; i < MAXTEST; i++)
{
people.Add(new Person(i.ToString()));
}
Run Code Online (Sandbox Code Playgroud)
MAXTEST值为100,500,1000,5000
结果为MAXTEST,noLogging,Logging
100, 25ms, 186ms
500, 33ms, 812ms
1000, 33ms, 1554ms
5000, 33ms, 7654ms
Run Code Online (Sandbox Code Playgroud)
当然,人们可能永远不会记录这个过多的数量,但是这会对人们所期望的性能造成影响吗?
我也尝试在配置中使用asyncwrapper
<target name="asyncFile" xsi:type="AsyncWrapper">
<target name="file" xsi:type="File" fileName="${basedir}/log.txt" />
</target>
Run Code Online (Sandbox Code Playgroud) 我知道它只允许班级设置它,但重点是什么?
如何解决只读ID的问题?
说我有一个人班:
public class Person
{
public string Name { get; set; }
public int Id { get; private set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是一个Entities.dll由GUI,BL和DAL使用的.
GUI调用BL:
List<Person> p = BL.PeopleBL.GetPeople();
Run Code Online (Sandbox Code Playgroud)
为了示例,调用DAL:
...
while(dr.read())
{
returnPersonList.add( new Person{ Age=dr.GetInt32(1), Id=dr.GetInt32(0), Name=dr.GetString(2)})
}
...
Run Code Online (Sandbox Code Playgroud)
当然我不能那样做因为Id是私人套装; 这样做的正确方法是什么?
如何让BL/Dal设置Id,而不是GUI?
或者这甚至没有正确使用私人套装?
我只想补充一点,这是典型的数据库应用程序,其中pk是Id,不应更改(仅限BL/DAL)
我不确定发生了什么或者我做了什么..现在我随时尝试调试它说所有BCL的东西都没有可用的源代码例如,在debug.print上我得到了这个消息
找到'f:\ dd \ndp\fx\src\CompMod\System\Diagnostics\Debug.cs'的源代码.校验和:MD5 {40 74 18 44 a8 15 28 2e 54 75 5e 40 d1 5f 6a 0}
文件'f:\ dd \ndp\fx\src\CompMod\System\Diagnostics\Debug.cs'不存在.
查看'f:\ dd \ndp\fx\src\CompMod\System\Diagnostics\Debug.cs'的脚本文档...
查看'f:\ dd \ndp\fx\src\CompMod\System\Diagnostics\Debug.cs'的项目.在项目中找不到该文件.
查看目录'C:\ Program Files\Microsoft Visual Studio 10.0\VC\crt\src \'...
查看目录'C:\ Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc \'...
查看目录'C:\ Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\src\atl \'...
查看目录'C:\ Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include \'...
活动解决方案的调试源文件设置表明调试器不会要求用户找到该文件:f:\ dd \ndp\fx\src\CompMod\System\Diagnostics\Debug.cs.
调试器找不到源文件'f:\ dd \ndp\fx\src\CompMod\System\Diagnostics\Debug.cs'.
这种情况一直都在发生,我:
有没有其他偷偷摸摸的设置让这些消息消失?
Public Enum Fruit
Red_Apple = 1
Oranges
Ripe_Banana
End Enum
Private Sub InitCombosRegular()
Dim d1 As New Dictionary(Of Int16, String)
For Each e In [Enum].GetValues(GetType(Fruit))
d1.Add(CShort(e), Replace(e.ToString, "_", " "))
Next
ComboBox1.DataSource = d1.ToList
ComboBox1.DisplayMember = "Value"
ComboBox1.ValueMember = "Key"
ComboBox1.SelectedIndex = 0
End Sub
'This fails
Dim combo1 = DirectCast(ComboBox1.SelectedValue, Fruit) ' Fails
'these both work
Dim combo2 = DirectCast(CInt(ComboBox1.SelectedValue), Fruit) 'works
Dim combo3 = CType(ComboBox1.SelectedValue, Fruit) 'works
Run Code Online (Sandbox Code Playgroud)
为什么CType工作和DirectCast语法不一样?然而,如果我在我之前投了selectedValue一个,那么它是有效的intDirectCast
问候
_Eric
我想知道如何做到这一点,考虑以下类
public class Fruit
{
public string Name { get; set; }
public Color Color { get; set; }
}
public class Apple : Fruit
{
public Apple()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我如何实例化一个新的水果,但转发到苹果,有没有办法实例化一堆水果,并使他们苹果与名称和颜色设置.我需要手动深层复制吗?
当然这失败了
Fruit a = new Fruit();
a.Name = "FirstApple";
a.Color = Color.Red;
Apple wa = a as Apple;
System.Diagnostics.Debug.Print("Apple name: " + wa.Name);
Run Code Online (Sandbox Code Playgroud)
我是否需要将Fruit传递给AppleCTor并手动设置名称和颜色(或1-n属性)是否有更好的设计来执行此操作?
有没有办法加快插入到mdb?
using (StreamReader sr = new StreamReader(_localDir + "\\" + _filename))
while ((line = sr.ReadLine()) != null)
{
//sanitize the data
}
Run Code Online (Sandbox Code Playgroud)
对于来自csv的约2mil记录,这需要大约20秒,但是当我添加mdb插入时,我在10分钟内几乎无法获得10,000条记录,因此您可以看到它将永远需要
using (StreamReader sr = new StreamReader(_localDir + "\\" + _filename))
while ((line = sr.ReadLine()) != null)
{
//sanitize the data
using (OleDbConnection con = new OleDbConnection(_conStr))
using (OleDbCommand cmd = new OleDbCommand())
cmd.Parameters.AddWithValue...//I have 22 params
cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?连接池?线程?这是我的constr Provider = Microsoft.Jet.OLEDB.4.0; Data Source = mypath; Jet OLEDB:Engine Type = 5"
问候
_Eric
c# ×6
.net ×2
casting ×1
ctype ×1
directcast ×1
graph ×1
logging ×1
ms-access ×1
nlog ×1
polymorphism ×1
properties ×1
vb.net ×1