小编Mik*_*oud的帖子

保持C#Filestream长时间打开是否安全?

在我的Web服务中,我打开一个文件流到本地磁盘上的文件.我会在服务的整个生命周期中保留这些信息.对于每个进来的查询,我使用文件流来读取磁盘.我这样做是为了避免在每次查询时重新打开文件流.该路径的延迟是至关重要的(应小于几毫秒).我使用SSD将磁盘IO时间保持在0.1ms或更短.

文件流可以在很长一段时间(天)内"变坏"(变得无效).在每个查询上重新打开文件流更安全吗?如果我必须重新打开,那么每秒不断重新打开文件流的开销是多少?

c# file-io filestream

10
推荐指数
2
解决办法
3780
查看次数

为什么SortedList <TKey,TValue>不使用指针值?

所以我正在通过执行SortedList<TKey, TValue>和实现Add(Insert下面显示的调用)真的让我感到惊讶.

Add方法进行明显的二元搜索以确定KVP应该进入的索引,但Insert 似乎可以显着改进(尽管在更大的范围内):

private void Insert(int index, TKey key, TValue value)
{
  if (this._size == this.keys.Length)
    this.EnsureCapacity(this._size + 1);
  if (index < this._size)
  {
    Array.Copy((Array) this.keys, index, (Array) this.keys, index + 1, this._size - index);
    Array.Copy((Array) this.values, index, (Array) this.values, index + 1, this._size - index);
  }
  this.keys[index] = key;
  this.values[index] = value;
  ++this._size;
  ++this.version;
}
Run Code Online (Sandbox Code Playgroud)

如果我正确地阅读这个,并且我保留在任何时候都是错的权利,这是一个O(2n)操作.

在我看来,应该用指针实现.像那种LinkedList …

.net c# data-structures

10
推荐指数
1
解决办法
235
查看次数

在大文件中搜索和替换正则表达式而不会出现OutOfMemoryException

我创建了一个小代码,用于搜索正则表达式字符串并将其替换为其他字符串,然后创建一个包含所做更改的新输出文件.代码似乎适用于较小的文件,但对于100 MB或更大的文件,我给出了System.OutOfMemoryException错误.

这是我的代码:

string foldername = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
    String.Format("FIXED_{0}.tmx",
        Path.GetFileNameWithoutExtension(textBox1.Text)));

string text = File.ReadAllText(textBox1.Text);
text = Regex.Replace(text, @"<seg\b[^>]*>", "<seg>", RegexOptions.Multiline);
text = Regex.Replace(text, @"<seg>
                    </tuv>", "<seg></seg></tuv>", RegexOptions.Multiline);

File.WriteAllText(foldername, text);
Run Code Online (Sandbox Code Playgroud)

Visual Studio突出了该string text = File.ReadAllText(textBox1.Text);部分.我认为也许使用File.ReadAllLines可以更好地工作,但我无法使其与正则表达式一起工作.

有人可以帮我这个吗?我是C#的新手,可能我的代码不是最好的.

c# regex

10
推荐指数
1
解决办法
907
查看次数

确保参数可序列化?

好的,让我看看能否尽可能简洁.我将把object一个未知类型传递给一个方法,该方法将在内部使用它BinaryFormatter来序列化它传递的数据(我选择了这个,因为我不知道数据是什么,所以它是我能想象的最抽象的机制).我们假设该方法目前看起来像这样:

public void ProvideData(Guid providerKey, ISerializable data, string dataType)...
Run Code Online (Sandbox Code Playgroud)

现在让我们假设我需要确保传递给我的内容实际上可以被序列化,以便为什么我认为我需要该对象来实现ISerializable.然而,有一个问题与此模型是我甚至不能传递一个string因为eventhough一个string[Serializable]它没有实现ISerializable.

那么,构造这个方法的正确方法是什么,以确保传递给我的简单或复杂的值是可序列化的?

c# serialization

9
推荐指数
1
解决办法
4268
查看次数

获取类的完全限定名称?

所有,我有一个log4net实现,我正在尝试使用AdoNetAppender,但appender配置的子元素之一是connectionType,它需要一个完全限定的类名称System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089(以文档为例).

但是,它无法加载那个,因为这是一个.NET4 MVC应用程序.有人可以告诉我如何获得完全限定的名称,以便加载类型并连接到数据库?我已经尝试了一切我可以诚实地想到的东西.

.net c# log4net asp.net-mvc-4

9
推荐指数
1
解决办法
2万
查看次数

获取错误"'VFPOLEDB.1'提供程序未在本地计算机上注册",即使在安装和注册提供程序之后

好吧,所以我有一个Windows服务,它有一个FileSystemWatcher监视某些Visual FoxPro数据库文件的输出文件夹.它利用VFPOLEDB.1提供程序来读取这些文件.我无法离开这家供应商,因为它正在生产中使用.

但是,我从来没有必要支持这个应用程序,所以这就是为什么我的开发盒没有设置它.这是我的环境:

  • Windows 7 x64
  • Visual Studio 2005
  • .NET 2.0 Windows服务

所以,当我第一次开始收到错误时,我认为我根本没有提供者,我是对的.所以,我从这里下载并安装了它.

然后我继续删除文件夹中的文件,但我得到了同样的错误.

我想是因为它是一x64台机器,我可能会遇到问题,因为它可能已经被注册了,因为它可能已经被删除SysWOW64,所以我按照预期运行了,所以我运行了这个命令:

regsvr32 "C:\Windows\SysWOW64\mscomct2.ocx"
Run Code Online (Sandbox Code Playgroud)

并且它说它已成功注册(这意味着什么都没有LOL)但我再次删除文件 - 同样的错误.

我还没有重新启动我的机器,如果有人有令人信服的理由认为是问题我可以,但一般来说,如果组件已正确注册regsvr32,则没有必要.我已经使用了大量的COM对象,只要我已经注册它就不需要重新启动就可以访问该对象.

有没有人知道我需要执行的另一个步骤来注册这个东西?

c# com windows-services visual-foxpro

9
推荐指数
2
解决办法
2万
查看次数

如何在c#中连接访问数据库

我有访问数据库文件,其中有7个表,但我不知道如何连接和显示所有表,如果有人可以帮助我?

这是我的代码,但它没有显示任何内容

private void button1_Click(object sender, EventArgs e)
{
    OleDbConnection conn = new OleDbConnection();
    String connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\Tables.accdb;Persist Security Info=True";
    string sql  = "SELECT Clients  FROM Tables";
    conn.ConnectionString = connection;
    conn.Open();
    DataSet ds = new DataSet();
    DataGridView dataGridView1 = new DataGridView();
    BindingSource bSource = new BindingSource();
    OleDbDataAdapter adapter = new OleDbDataAdapter(sql,conn);
    adapter.Fill(ds);
    //conn.Close();                               
    dataGridView1.DataSource = ds;
Run Code Online (Sandbox Code Playgroud)

.net c# ado.net

9
推荐指数
2
解决办法
11万
查看次数

为什么我的Web API的响应没有正确形成?

我有一个非常基本的Web API示例,我使用本教程中示例代码构建:

相关的Web.config部分

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
Run Code Online (Sandbox Code Playgroud)

路线配置

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

查看模型

public class Survey …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc asp.net-web-api

9
推荐指数
1
解决办法
439
查看次数

读者可以为Nulllable的整数值

我们如何从Sql Data Reader读取整数空值

SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read() == true)
{
    mb.Id = (int)reader["Id"];
    mb.Mem_NA = (string)reader["Mem_NA"];
    mb.Mem_ResAdd4 = reader["Mem_ResAdd4"] == System.DBNull.Value ? null : (string)reader["Mem_ResAdd4"];
    //
   mb.Mem_ResPin = reader["Mem_ResPin"] as  int? ?? default(int);
  // shows the error "Object cannot be cast from DBNull to other types."
 }
Run Code Online (Sandbox Code Playgroud)

mb.Mem_ResPin无法从读者那里读到

 CREATE TABLE [dbo].[Mem_Basic] (
[Id]          INT           IDENTITY (1, 1) NOT NULL,
[Mem_NA]      VARCHAR (100) NOT NULL,
[Mem_ResAdd4] VARCHAR (100) NULL,
[Mem_ResPin]  INT           NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
Run Code Online (Sandbox Code Playgroud)

c# sql

9
推荐指数
3
解决办法
7780
查看次数

在datetime c#中格式化字符串以在MYSQL datetime列中插入

我有这样的代码:

AutoParkDataDataContext Db = new AutoParkDataDataContext();
Dailyreport dailyRep = new Dailyreport();
string time = Convert.ToDateTime("10-10-2014 15:00:00");
dailyRep.order_time = time;
Db.Dailyreports.InsertOnSubmit(dailyRep);
Db.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

当我在DailyReport表格中看到它时,它只显示日期("10-10-2014 00:00:00:00"),因此忽略了时间.我怎么能解决它?列类型是DateTime.

.net c# mysql

9
推荐指数
1
解决办法
4万
查看次数