我们运行一个C#控制台应用程序,启动多个线程来完成工作.主要功能看起来像这样:
try
{
DoWork();
}
catch (Exception err)
{
Logging.Log("Exception " + err.ToString());
}
Logging.Log("Finished");
Run Code Online (Sandbox Code Playgroud)
该DoWork()函数从数据库中读取新作业,并生成线程以分别处理一个工作项.从上周开始,应用程序开始神秘地消失.它从进程列表中消失,事件日志中没有条目.日志文件显示工作到某一点:它不记录异常,或"完成"行.
有关C#应用程序如何消失的任何线索?
编辑:线程创建如下:
new Thread(SomeObj.StartFunc).Start();
Run Code Online (Sandbox Code Playgroud)
当没有线程运行时,会发生一些消失.
PS我们安装了DebugDiag,其规则是在我们的程序崩溃时创建崩溃转储.当进程消失时,它没有创建任何转储文件.
为了将此问题简化为简单版本,我创建了此表:
create table TestTable(id int primary key, descr varchar(50))
Run Code Online (Sandbox Code Playgroud)
请注意,该id字段不是标识字段.现在,如果我尝试使用EF Code First插入一行:
[Table("TestTable")]
public class TestTable
{
[Key]
public int id { get; set; }
public string descr { get; set; }
}
public class TestContext : DbContext
{
public TestContext(string connectionString) : base(connectionString) {}
public DbSet<TestTable> TestTables { get; set; }
}
static void Main()
{
const string connectionString = "...";
using (var db = new TestContext(connectionString))
{
db.TestTables.Add(new TestTable { id = 42, descr = "hallo" …Run Code Online (Sandbox Code Playgroud) 假设以下查询:
SELECT * FROM table;
Run Code Online (Sandbox Code Playgroud)
DBMS会在获取第一行后立即给我第一行,还是首先获取所有行(将它们保存在某种缓冲区中)然后立即给我所有行?
如果我的问题不明确.假设其中的行数table使得DBMS将花费60分钟来获取所有行.DBMS会在60分钟内逐步返回行,还是在收到任何数据之前需要等待60分钟?
我正在编写一个Python脚本来更新Visual Studio项目文件.它们看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
...
Run Code Online (Sandbox Code Playgroud)
以下代码读取然后写入文件:
import xml.etree.ElementTree as ET
tree = ET.parse(projectFile)
root = tree.getroot()
tree.write(projectFile,
xml_declaration = True,
encoding = 'utf-8',
method = 'xml',
default_namespace = "http://schemas.microsoft.com/developer/msbuild/2003")
Run Code Online (Sandbox Code Playgroud)
Python在最后一行抛出错误,说:
ValueError: cannot use non-qualified names with default_namespace option
Run Code Online (Sandbox Code Playgroud)
这是令人惊讶的,因为我只是在阅读和写作,中间没有编辑.Visual Studio拒绝加载没有默认命名空间的XML文件,因此省略它不是可选的.
为什么会出现此错误?建议或替代方案欢迎.
我是一位非常有经验的MS Sql开发人员,我将在几天内与Oracle合作开展一些新的职位.
与我学到的所有技术一样,我想知道最好的地方和书籍,以及使用Oracle设计和开发的速度,并使用纯C#.
有什么资源让我们微软的员工可以加入Oracle并与之合作?我意识到有oracle.com和asktom.oracle.com,以及关于Oracle的大量文档,我正在寻找一个快速入门(设置服务器,获取一些样本数据等). .)而不是深入sql与oracle技术的比较.
提前致谢.
在尝试回答另一个问题时,我将C#对象序列化为XML字符串.这真是令人惊讶的困难; 这是我能提出的最短的代码片段:
var yourList = new List<int>() { 1, 2, 3 };
var ms = new MemoryStream();
var xtw = new XmlTextWriter(ms, Encoding.UTF8);
var xs = new XmlSerializer(yourList.GetType());
xs.Serialize(xtw, yourList);
var encoding = new UTF8Encoding();
string xmlEncodedList = encoding.GetString(ms.GetBuffer());
Run Code Online (Sandbox Code Playgroud)
结果还可以:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfInt
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<int>1</int>
<int>2</int>
<int>3</int>
</ArrayOfInt>
Run Code Online (Sandbox Code Playgroud)
但是片段比我想象的要复杂得多.我无法相信你必须知道编码和MemoryStream这个简单的任务.
是否有更短的方法将对象序列化为XML字符串?
在Visual Studio中,我键入 CTRL-F以打开"查找和替换"对话框.我可以用F3或搜索ENTER.这让我进入下一个热门,重点是找到文本的窗口.
但是,"查找和替换"对话框仍然存在.如果我按下ESCAPE窗口失去焦点,但它不会消失.我最终不得不将鼠标移动到右上方的小X上,每天100次.
是否有键盘快捷键来关闭"查找和替换"对话框?
我试图在两种可能的实现之间做出决定,我渴望选择最好的一种:)
我需要向表中添加一个可选的BLOB字段,该表当前只有3个简单字段.据预测,新字段的使用率将低于10%,甚至可能低于5%,因此对于大多数行来说它将为空 - 事实上,我们的大多数客户可能永远不会有任何BLOB数据.
同事的第一个倾向是添加一个新表来保存BLOB,在第一个表中有一个(可为空的)外键.他预测在查询第一个表时会有性能优势.
我的想法是,将BLOB直接存储在原始表中更合乎逻辑,也更容易.我们的查询都没有SELECT *从该表中进行,因此我的直觉是直接存储它不会产生显着的性能开销.
我将对两种选择进行基准测试,但我希望一些SQL专家可以从经验中获得任何建议.
使用MSSQL和Oracle.
从2个表执行select时我发现了一些奇怪的东西:
SELECT * FROM table_1 WHERE id IN (
SELECT id_element FROM table_2 WHERE column_2=3103);
Run Code Online (Sandbox Code Playgroud)
此查询大约需要242秒.
但是当我执行子查询时
SELECT id_element FROM table_2 WHERE column_2=3103
Run Code Online (Sandbox Code Playgroud)
它花了不到0.002s(并产生了2行).
然后,当我做的时候
SELECT * FROM table_1 WHERE id IN (/* prev.result */)
Run Code Online (Sandbox Code Playgroud)
它是相同的:0.002s.
我想知道MySQL为什么会这样做第一个查询,比最后两个查询分别花费更多的时间?它是根据子查询结果选择内容的最佳解决方案吗?
其他细节:table_1约有.9000行,并table_2有90000行.
在我添加索引column_2后table_2,第一个查询花了0.15秒.
问题是这个......
表是这个..
+--------------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+---------+------+-----+---------+----------------+
| facility_map_id | int(10) | NO | PRI | NULL | auto_increment |
| facility_map_facility_id | int(10) | NO | MUL | NULL | |
| facility_map_listing_id | int(10) | NO | | NULL | |
+--------------------------+---------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
这是数据..
+-----------------+--------------------------+-------------------------+
| facility_map_id | facility_map_facility_id | facility_map_listing_id |
+-----------------+--------------------------+-------------------------+
| 248 | 1 | 18 |
| 259 | 1 | 19 |
| 206 …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×3
sql-server ×3
mysql ×2
oracle ×2
select ×2
sql ×2
xml ×2
blob ×1
elementtree ×1
group-by ×1
optimization ×1
performance ×1
postgresql ×1
python ×1